Docker 配置参数详解

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-filesyslog

journald 等,可以根据需求选择合适的日志驱动,并通过 log-opts 进行细粒度配置。

"log-driver": "json-file",
"log-opts": {
  "max-size": "10m",
  "max-file": "3"
}

max-sizemax-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:查看容器或镜像的详细信息。

扩展阅读

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值