Docker 容器启动参数如何高效配置?

99ANYc3cd6
预计阅读时长 18 分钟
位置: 首页 参数 正文

我们将通过 docker run 命令来讲解,因为大多数启动参数都是 docker run 的选项。

docker 容器启动参数
(图片来源网络,侵删)

docker run 命令的基本语法

docker run [OPTIONS] IMAGE [COMMAND] [ARG...]
  • [OPTIONS]: 这就是我们今天要详细讨论的各种启动参数。
  • IMAGE: 要运行的镜像名称和标签,nginx:latest
  • [COMMAND]: 容器启动后要执行的命令(可选),如果镜像中已经定义了默认的启动命令,这个参数会覆盖它。
  • [ARG...]: 传递给 [COMMAND] 的参数(可选)。

核心参数分类详解

下面我将参数分为几个大类,并解释每个类别中最重要的参数。

基础与生命周期管理

这些参数控制容器的名称、是否自动删除、是否在后台运行等基本行为。

参数 简写 描述 示例
--name 为容器指定一个名称,方便后续管理。 docker run --name my-web-server nginx
--rm 容器停止后自动删除,非常适合用于测试或一次性任务。 docker run --rm busybox echo "Hello"
-d --detach 在后台运行容器,并返回容器 ID。 docker run -d nginx
-it 组合使用,-i 保持 STDIN 开启,-t 分配一个伪终端,通常用于交互式操作。 docker run -it ubuntu /bin/bash
--restart 指定容器的重启策略。 docker run --restart always nginx
no: 不自动重启(默认)。
on-failure: 只有在非零退出码时才重启。
always: 无论如何都会重启。
unless-stopped: 除非手动停止,否则总是重启。

端口映射

这是最常用的参数之一,用于将容器的端口暴露给主机。

参数 简写 描述 示例
-p 端口映射,格式为 主机端口:容器端口IP:主机端口:容器端口 docker run -p 8080:80 nginx (将主机8080映射到容器80)
-P 随机端口映射,将镜像中所有 EXPOSE 的端口随机映射到主机的临时端口。 docker run -P nginx

数据卷管理

用于持久化数据或共享数据,将主机的目录/文件挂载到容器中。

docker 容器启动参数
(图片来源网络,侵删)
参数 简写 描述 示例
-v 绑定挂载,格式为 主机路径:容器内路径 docker run -v /my/data:/app/data nginx
--mount 更灵活、更明确的挂载方式,推荐使用。 docker run --mount type=bind,source=/my/data,target=/app/data nginx
-v 命名卷,格式为 卷名:容器内路径,Docker 会自动管理这个卷的生命周期。 docker run -v my-named-volume:/app/data nginx

注意--mount 是更现代的语法,功能更强大(可以指定只读、挂载类型等),而 -v 是传统的语法,但依然非常流行。

环境变量

用于向容器内部传递配置信息。

参数 简写 描述 示例
-e 设置环境变量 docker run -e "MY_VAR=my_value" nginx
--env-file 从文件中读取环境变量,文件每行一个 KEY=VALUE docker run --env-file .env nginx

资源限制

用于控制容器可以使用的主机资源,防止某个容器耗尽所有资源。

参数 简写 描述 示例
--memory -m 限制内存使用,可以带单位(b, k, m, g)。 docker run -m 512m nginx
--cpus 限制 CPU 使用,可以是小数(表示核数)或百分比。 docker run --cpus="1.5" nginx (最多使用1.5个核)
--cpus docker run --cpus="0.5" nginx (最多使用50%的CPU)
--memory-swap 限制内存+交换分区,必须大于 --memory 的值,设为0表示和内存限制一样。 docker run -m 512m --memory-swap 1g nginx
--pids-limit 限制进程数 docker run --pids-limit 100 nginx

网络配置

控制容器的网络模式。

docker 容器启动参数
(图片来源网络,侵删)
参数 简写 描述 示例
--network 指定网络模式 docker run --network bridge nginx (默认模式)
none: 容器没有网络。 docker run --network none nginx
host: 容器共享主机的网络命名空间,性能好,但安全性低。 docker run --network host nginx
container:<name/id>: 与另一个容器共享网络命名空间。 docker run --network container:my-other-container nginx
--ip 指定容器的 IP 地址(仅在自定义网络中有效)。 docker run --network my-custom-net --ip 172.18.0.10 nginx

用户与安全

参数 简写 描述 示例
-u 指定运行容器的用户,可以是用户名、UID 或 user:group docker run -u 1000 nginx
--read-only 以只读模式挂容器的根文件系统,需要结合 -v--mount 来提供可写的临时目录(如 /tmp)。 docker run --read-only -v /tmp:/tmp nginx
--security-opt 设置安全选项,禁用 SELinux 或 AppArmor。 docker run --security-opt label=disable nginx

日志配置

参数 简写 描述 示例
--log-driver 指定日志驱动,如 json-file, journald, syslog 等。 docker run --log-driver syslog nginx
--log-opt 为日志驱动设置选项 docker run --log-driver json-file --log-opt max-size="10m" --log-opt max-file="3" nginx

综合示例

下面是一个相对复杂的 docker run 命令,它结合了我们上面讲到的多个参数:

docker run -d \
  --name my-app \
  --restart unless-stopped \
  -p 8080:80 \
  -v /opt/my-app/data:/usr/share/nginx/html \
  -v /opt/my-app/logs:/var/log/nginx \
  -e "ENVIRONMENT=production" \
  --memory 512m \
  --cpus 1.0 \
  --log-driver json-file \
  --log-opt max-size="10m" \
  --log-opt max-file="3" \
  nginx:latest

这条命令的含义是:

  1. -d: 在后台运行容器。
  2. --name my-app: 将容器命名为 my-app
  3. --restart unless-stopped: 除非手动停止,否则容器退出后总是重启。
  4. -p 8080:80: 将主机的 8080 端口映射到容器的 80 端口。
  5. -v /opt/my-app/data:/usr/share/nginx/html: 将主机的 /opt/my-app/data 目录挂载到容器的网页根目录,用于持久化网页内容。
  6. -v /opt/my-app/logs:/var/log/nginx: 将主机的 /opt/my-app/logs 目录挂载到容器的日志目录,用于持久化日志。
  7. -e "ENVIRONMENT=production": 设置一个环境变量 ENVIRONMENTproduction,供应用使用。
  8. --memory 512m: 限制容器最多使用 512MB 内存。
  9. --cpus 1.0: 限制容器最多使用 1 个 CPU 核心。
  10. --log-driver ...: 配置日志驱动为 json-file,并限制单个日志文件最大为 10MB,最多保留 3 个日志文件。

其他重要命令

除了 docker run,还有一些命令也带有启动参数,用于管理已经运行的容器:

  • docker create: 与 docker run 类似,但它只创建容器,不启动它,返回容器 ID,你可以用 docker start <container_id> 来启动它。
  • docker exec: 在正在运行的容器中启动一个新进程。
    • docker exec -it my-app /bin/bash: 进入 my-app 容器的 shell。
    • docker exec my-app ls /usr/share/nginx/html: 在容器内执行 ls 命令。
  • docker update: 更新一个或多个已运行容器的配置(例如资源限制)。
    • docker update --memory 1g my-app: 将 my-app 容器的内存限制更新为 1GB。

掌握这些参数是使用 Docker 的基础,建议你:

  1. 从常用参数开始-d, -p, -v, -e 是最核心的。
  2. 查阅官方文档:Docker 的更新很快,所有参数的最终解释权威来源是 Docker Engine CLI documentation
  3. 多加练习:尝试组合不同的参数来创建满足你需求的容器,这是最好的学习方式。
-- 展开阅读全文 --
头像
vivox9plus拆机内部结构有何不同?
« 上一篇 今天
Venue8 7840拆机图内部结构如何?
下一篇 » 今天

相关文章

取消
微信二维码
支付宝二维码

最近发表

标签列表

目录[+]