Docker 配置参数详解
Docker 是一个开源的容器化平台,广泛应用于开发、测试和生产环境中。为了更好地使用 Docker,我们需要深入了解其各种配置参数。本文将详细介绍 Docker 的常用配置参数,包括基本运行参数、高级配置参数、Docker Daemon 配置及常用命令总结。
1. 基本运行参数
1.1 镜像名 (Image Name)
镜像是 Docker 的核心概念之一,它是一个只读的模板,用于创建 Docker 容器。镜像可以从 Docker Hub 或私有的镜像仓库中拉取。运行容器时,必须指定镜像名。
docker run 镜像名
例如,运行一个官方的 Nginx 镜像:
docker run nginx
你还可以指定镜像的特定版本(标签),如 nginx:1.19
,如果不指定版本,Docker 会默认拉取 latest
标签。
1.2 容器名 (Container Name)
每个运行的容器都有一个唯一的 ID,但为了方便管理,你可以为容器指定一个易于记忆的名称。这样,在后续操作时,可以直接使用容器名称,而不是容器 ID。
docker run --name 容器名 镜像名
例如,为容器命名为 my-nginx
:
docker run --name my-nginx nginx
1.3 别名 (Container Alias)
别名用于在自定义网络中为容器指定额外的名称。这在多个容器需要互相通信的场景中特别有用,别名可以让你为容器提供多个访问名称。
docker run --network my-network --network-alias 别名 镜像名
例如,给容器指定一个别名 web
:
docker run --network my-network --network-alias web nginx
这样,网络中的其他容器可以通过 web
这个别名访问该容器。
1.4 端口映射 (Port Mapping)
端口映射用于将容器内部的端口映射到宿主机的端口,使得外部可以访问容器内运行的服务。通过端口映射,Docker 允许你将容器中的特定端口暴露给外部世界,以便提供服务,例如 Web 服务器、数据库等。
docker run -d -p 宿主机端口:容器端口 镜像名
例如,将容器的 8080 端口映射到宿主机的 80 端口,这样访问宿主机的 80 端口就等同于访问容器的 8080 端口:
docker run -d -p 80:8080 tomcat
Docker 还支持随机端口映射,使用 -p :容器端口
可以让 Docker 自行选择宿主机的一个可用端口映射到容器的指定端口。
1.5 目录映射 (Volume Mounting)
目录映射用于将宿主机的目录挂载到容器内,以便实现数据共享。通过目录映射,宿主机的数据可以直接被容器访问和使用,反之亦然。它是持久化容器数据的主要方式。
docker run -d -v 宿主机目录:容器目录 镜像名
例如,将宿主机的 /data
目录挂载到容器的 /app
目录,容器内部对 /app
的所有操作都将反映到宿主机的 /data
目录中:
docker run -d -v /data:/app tomcat
另外,可以通过 :ro
将挂载目录设置为只读模式:
docker run -d -v /data:/app:ro tomcat
1.6 重启策略 (Restart Policies)
Docker 提供了几种不同的重启策略,用于在容器异常退出后自动重启容器,适合需要长期运行的服务。
docker run -d --restart 策略 镜像名
常见的重启策略包括:
no
: 不自动重启。on-failure
: 仅在容器非零退出状态时重启。always
: 无论退出状态如何,总是重启。unless-stopped
: 容器除非被手动停止,否则总是重启。
例如,设置容器在退出时总是重启:
docker run -d --restart always tomcat
2. 高级配置参数
2.1 环境变量 (Environment Variables)
环境变量用于向容器传递运行时所需的配置信息,例如数据库连接字符串、服务端口等。设置环境变量的方法如下:
docker run -d -e "变量名=值" 镜像名
例如,向容器传递一个环境变量 ENV
,其值为 production
:
docker run -d -e "ENV=production" tomcat
你还可以通过 .env
文件批量设置环境变量:
docker run --env-file ./my-env-file.env -d 镜像名
2.2 网络模式 (Network Modes)
Docker 提供了多种网络模式,适应不同的网络需求。常见的网络模式有:
bridge
: 默认模式,Docker 创建一个独立的网络桥接器(bridge),容器通过此桥接器与宿主机和其他容器通信。host
: 容器直接使用宿主机的网络栈,与宿主机共享网络接口。none
: 容器没有网络连接,完全隔离。container:<name|id>
: 容器与指定的其他容器共享网络栈。
使用 --network
参数指定容器的网络模式:
docker run -d --network bridge 镜像名
在 host
模式下,容器和宿主机共享 IP 地址和端口空间,适用于需要高性能网络的场景:
docker run -d --network host 镜像名
2.3 自动删除 (Auto Remove)
为了避免产生大量无用的容器,Docker 提供了 --rm
参数,允许在容器退出后自动删除容器。
docker run --rm 镜像名
这种方式特别适合一次性任务,如数据处理脚本、批处理任务等。
2.4 限制资源 (Resource Constraints)
Docker 支持对容器使用的 CPU、内存等资源进行限制,以保证宿主机资源的合理使用,避免某个容器独占资源。
docker run -d --cpus="1.5" --memory="512m" 镜像名
例如,将容器限制为最多使用 1.5 个 CPU 和 512MB 内存:
docker run -d --cpus="1.5" --memory="512m" tomcat
2.5 运行模式 (Detached vs. Interactive)
-d
(detached 模式): 容器将在后台运行,并返回容器 ID。适用于需要持续运行的服务。-i
和-t
(interactive 模式和伪终端): 结合使用-it
参数,可以启动容器并进入交互式命令行模式,适用于调试或需要用户输入的任务。
例如,运行一个交互式的 Ubuntu 容器:
docker run -it ubuntu /bin/bash
3. Docker Daemon 配置
Docker Daemon 是 Docker 的核心服务,负责管理容器、镜像、网络等资源。它的配置文件通常位于 /etc/docker/daemon.json
,可以通过编辑该文件来调整 Docker 的全局行为。
{
"debug": true,
"default-runtime": "runc",
"dns": ["223.5.5.5", "1.0.0.1"],
"log-driver": "json-file",
"log-opts": {
"max-size": "10m",
"max-file": "3"
},
"storage-driver": "overlay2"
}
3.1 启用调试模式
调试模式允许你查看 Docker Daemon 的详细日志信息,帮助诊断和解决问题。
"debug": true
3.2 设置 DNS
自定义 DNS 服务器,以便容器内部可以解析域名。默认情况下,Docker 使用宿主机的 DNS 配置。
"dns": ["223.5.5.5", "1.0.0.1"]
3.3 日志配置
Docker 支持多种日志驱动,如 json-file
、syslog
、journald
等,可以根据需求选择合适的日志驱动,并通过 log-opts
进行细粒度配置。
"log-driver": "json-file",
"log-opts": {
"max-size": "10m",
"max-file": "3"
}
max-size
和 max-file
用于控制日志文件的大小和数量,避免日志占用过多磁盘空间。
3.4 存储驱动
存储驱动决定了 Docker 如何管理容器和镜像的文件系统。overlay2
是当前主流的存储驱动,性能优越且支持层级文件系统。
"storage-driver": "overlay2"
4. 常用命令总结
docker run
:运行一个新的容器。docker ps
:列出当前运行的容器。docker stop
:停止一个运行中的容器。docker rm
:删除一个容器。docker images
:列出本地镜像。docker rmi
:删除一个镜像。docker exec
:在运行的容器中执行命令。docker logs
:查看容器的日志。docker inspect
:查看容器或镜像的详细信息。