Docker 使用笔记
1. Docker 基本概念
Docker 是一个开源的容器化平台,允许开发者将应用程序及其依赖打包到一个轻量级、可移植的容器中,然后在任何环境中运行。
- Docker Image(镜像) :包含有运行应用所需的代码、库、环境变量和配置文件的只读模板。可以把它看作是应用的“源代码”。
- Docker Container(容器) :镜像的运行实例。它可以被启动、开始、停止、删除。每个容器都是相互隔离、保证安全的平台。
- Dockerfile:一种被Docker程序解析的脚本,包含了从基础镜像开始所需进行的步骤和命令的集合,用以自动化构建Docker镜像。
- Docker Hub:Docker的官方远程仓库,可以让你发现、分享和管理Docker镜像。
- Docker Compose:一个用于定义和运行多容器Docker应用程序的工具。通过一个YAML文件来配置应用服务。
2. 安装Docker
Windows安装:
- 访问Docker Hub网站下载Docker Desktop应用。
- 运行安装程序,按照指示完成安装。
- 启动Docker Desktop,等待Docker服务启动。
Linux安装(以Ubuntu为例):
sudo apt update
sudo apt install apt-transport-https ca-certificates curl software-properties-common
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"
sudo apt update
sudo apt install docker-ce
sudo systemctl status docker # 验证Docker是否成功安装
3. 常用Docker命令
docker run:创建一个新的容器并运行一个命令。docker start:启动一个或多个已经停止的容器。docker stop:停止一个运行中的容器。docker build:用Dockerfile构建一个镜像。docker pull:从镜像仓库拉取或者更新指定镜像。docker push:将本地的镜像推送到镜像仓库。docker images:列出本地的所有镜像。docker rmi:删除一个或多个镜像。docker ps:显示当前运行的容器。docker exec:在运行的容器中执行命令。
4. Docker 文件管理
- 数据卷(Volumes) :用于数据持久化和容器间共享数据。数据卷可以在容器被删除后继续存在。
- 绑定挂载(Bind Mounts) :将宿主机的文件或目录挂载到容器中,常用于应用的快速迭代开发。
5. 实用技巧
- 使用
.dockerignore文件排除不需要添加到Docker镜像中的文件。 - 利用多阶段构建(Multi-stage builds)优化镜像大小。
- 设置自动重启策略(例如:
--restart=always)确保容器的稳定运行。 - 使用Docker Compose来管理多容器应用,通过
docker-compose up一键启动整个应用。
6. 高级应用
- Docker Swarm:Docker的容器编排和集群管理工具,可以让多个Docker主机形成一个集群,实现容器的快速扩展。
- Kubernetes:与Docker容器兼容的开源容器编排系统,用于自动化应用的部署、扩展和管理。
Docker 网络管理
Docker允许你创建多种网络模式,为容器间通信提供灵活性:
- Bridge网络:默认的网络模式。如果没有指定网络,容器会自动连接到一个默认的bridge网络。
- Host网络:容器将不会获得自己的IP地址,直接使用宿主机的IP和端口,这通常用于需要提高性能的场景。
- Overlay网络:使得多个Docker守护进程连接在一起,并允许容器之间的通信,这个功能主要在Docker Swarm模式下使用。
- Macvlan网络:通过允许容器拥有自己的MAC地址来模拟物理设备,容器可以像物理设备一样出现在网络上,适用于需要运行在物理网络下的应用。
Docker 安全实践
Docker的安全性是部署时需要考虑的关键因素,以下是一些增强Docker容器安全性的建议:
- 使用官方镜像:尽可能使用官方或经过验证的可信镜像,避免使用未知来源的镜像。
- 及时更新镜像:定期更新容器内的操作系统和应用程序,确保安全漏洞得到修补。
- 最小权限原则:运行容器时,尽可能地限制其权限,例如使用
--read-only标志使容器文件系统为只读。 - 使用用户组和用户:通过指定非root用户运行容器,减少潜在的安全风险。
- 利用Docker Secrets管理敏感数据:为敏感数据(如密码和私钥)提供安全的存储和管理方式,避免将这些数据直接嵌入到镜像或源代码中。
Docker 性能优化
优化Docker容器的性能是提高整体应用响应能力和资源利用率的重要方面:
- 资源限制:通过
--memory(内存)和--cpu-shares(CPU)选项限制容器可以使用的资源,防止某个容器占用过多资源影响其他容器。 - 存储优化:选择合适的存储驱动,例如Overlay2通常比aufs具有更好的性能和效率。
- 网络性能:对于需要高网络性能的应用,考虑使用Host网络模式,这样可以减少Docker网络堆栈带来的额外开销。
- 清理无用资源:定期清理未使用的镜像、悬空镜像、停止的容器和无用的网络配置,可以帮助保持Docker环境的清洁和高效。
Docker 日志管理
合理管理日志对于维护和调试Docker容器是非常重要的:
- 配置日志驱动:Docker支持多种日志驱动,例如json-file、syslog等。根据需要配置合适的日志驱动,可以更好地集成到现有的日志管理系统。
- 日志轮换:对于json-file驱动,可以配置日志文件的最大大小和文件数量,帮助避免磁盘空间被无限制的日志文件占满。
4. Docker 常用命令
-
查看 Docker 版本:
docker --version -
拉取镜像:
docker pull <image_name> -
查看本地镜像:
docker images -
运行容器:
docker run -d -p <host_port>:<container_port> --name <container_name> <image_name>-d: 后台运行-p: 端口映射--name: 指定容器名称
-
查看运行中的容器:
docker ps -
查看所有容器(包括停止的):
docker ps -a -
停止容器:
docker stop <container_id/name> -
启动已停止的容器:
docker start <container_id/name> -
删除容器:
docker rm <container_id/name> -
删除镜像:
docker rmi <image_id> -
查看容器日志:
docker logs <container_id/name> -
进入容器内部:
docker exec -it <container_id/name> /bin/bash
5. Docker 网络
-
查看网络:
docker network ls -
创建网络:
docker network create <network_name> -
连接容器到网络:
docker network connect <network_name> <container_name>