【Docker】创建并运行容器:docker run 命令及所有参数详解

📌 docker run 命令及所有参数详解

docker run 命令用于基于某个 Docker 镜像 创建并运行一个 容器。以下是完整的 docker run 语法:

docker run [OPTIONS] IMAGE [COMMAND] [ARG...]

其中:

  • IMAGE:指定镜像名称(如 nginx:latest)。
  • COMMAND:指定运行的命令(如 bash)。
  • ARG:传递给 COMMAND 的参数。

🚀 1. docker run 常用参数

选项说明
-d / --detach后台模式运行容器(不占用终端)
-it交互模式(-i 保持 STDIN,-t 分配终端)
--rm容器退出后自动删除
--name <容器名>指定容器的名称
-p <主机端口>:<容器端口>端口映射(如 -p 8080:80
-v <主机目录>:<容器目录>数据卷挂载(如 -v /data:/app
-e <环境变量>设置环境变量(如 -e ENV=prod
--restart=<策略>容器重启策略(noalwaysunless-stoppedon-failure
--network=<网络模式>指定网络模式(bridgehostnonecontainer:<name>
--privileged特权模式运行,允许访问宿主机设备
--cpus=<n>限制 CPU 核心数(如 --cpus=2.5
--memory=<size>限制容器内存使用(如 --memory=512m

🚀 2. docker run 命令的完整参数详解

以下是 docker run 的所有常见参数及详细解释:

🔹 1. 容器运行模式

选项说明
-d / --detach后台模式运行容器(不会占用当前终端)
-i / --interactive让容器保持标准输入 (STDIN) 打开
-t / --tty分配一个伪终端(通常与 -i 结合使用)
--rm容器退出后自动删除(适用于临时任务)
--name <容器名>指定容器的名称
-a / --attach连接到已运行的容器的 STDIN, STDOUT, STDERR

📌 示例

docker run -it --rm ubuntu bash  # 交互模式运行 Ubuntu,退出后自动删除容器
docker run -d --name myapp nginx  # 后台运行 nginx 容器

🔹 2. 端口映射

选项说明
-p <主机端口>:<容器端口>端口映射(如 -p 8080:80
-P / --publish-all自动随机分配端口

📌 示例

docker run -d -p 8080:80 nginx  # 访问 http://localhost:8080

🔹 3. 数据卷挂载

选项说明
-v <主机目录>:<容器目录>挂载目录(如 -v /data:/app
--mount type=bind,source=<主机目录>,target=<容器目录>推荐的挂载方式
--tmpfs <目录>内存中创建临时文件存储
--read-only只读模式运行容器

📌 示例

docker run -it -v /home/user/data:/app ubuntu bash  # 容器内 /app 目录映射到宿主机 /home/user/data

🔹 4. 资源限制

选项说明
--cpus=<n>限制 CPU 核心数(如 --cpus=2
--memory=<size>限制容器的最大内存(如 --memory=512m
--memory-swap=<size>限制 Swap 交换空间
--oom-kill-disable禁用 OOM(内存溢出终止)
--device=<主机设备>:<容器设备>允许容器访问宿主机设备

📌 示例

docker run -d --cpus=2 --memory=512m nginx  # 限制 nginx 运行时使用 2 核 CPU 和 512MB 内存

🔹 5. 环境变量

选项说明
-e <变量名>=<值>传递环境变量
--env-file <文件路径>从文件加载环境变量

📌 示例

docker run -d -e ENV=production -e PORT=8080 myapp

🔹 6. 网络配置

选项说明
--network=bridge默认网络模式(容器之间隔离)
--network=host共享宿主机网络(无端口映射)
--network=none无网络模式
--network=<自定义网络>使用自定义网络
--ip=<IP地址>指定容器 IP 地址(仅适用于自定义网络)

📌 示例

docker run -d --network=host nginx  # 让容器使用宿主机网络

🔹 7. 重启策略

选项说明
--restart=no默认,不自动重启
--restart=always始终自动重启
--restart=unless-stopped除非手动停止,否则自动重启
--restart=on-failure[:次数]失败时自动重启(可限制次数)

📌 示例

docker run -d --restart=always nginx  # 永久运行 nginx

🔹 8. 容器权限

选项说明
--privileged特权模式(容器可访问所有设备)
--cap-add=<权限>添加特定权限
--cap-drop=<权限>去除特定权限
--security-opt seccomp=unconfined取消 seccomp 保护

📌 示例

docker run -d --privileged myapp  # 允许容器访问所有宿主机资源
docker run -d --cap-add=NET_ADMIN myapp  # 仅允许修改网络配置

🔹 9. 指定用户

选项说明
-u <用户名>指定运行容器的用户
--group-add <组>指定附加用户组

📌 示例

docker run -it -u 1000:1000 ubuntu bash  # 以 UID=1000, GID=1000 运行容器

📌 10. docker run 经典示例

1️⃣ 运行 Nginx

docker run -d --name mynginx -p 8080:80 nginx

2️⃣ 运行 MySQL

docker run -d --name mysql-server \
  -e MYSQL_ROOT_PASSWORD=123456 \
  -v /data/mysql:/var/lib/mysql \
  -p 3306:3306 \
  mysql:latest

3️⃣ 运行 Python 应用

docker run -it --rm -v $(pwd):/app python:3.9 bash

4️⃣ 运行 Redis 并限制资源

docker run -d --name myredis \
  --memory=512m --cpus=2 \
  -p 6379:6379 redis

📌 11. 总结

选项说明
-d后台运行
-it交互模式
-p 8080:80端口映射
-v /data:/app挂载数据卷
--memory=512m限制内存
--cpus=2限制 CPU
--network=host使用宿主机网络
--restart=always自动重启

🚀 3. docker run 使用示例合集

# 后台运行 Nginx
docker run -d --name mynginx -p 8080:80 nginx

# 交互模式运行 Ubuntu,并在退出时删除容器
docker run -it --rm ubuntu bash

# 运行 MySQL 并设置密码
docker run -d --name mysql-server -e MYSQL_ROOT_PASSWORD=123456 -p 3306:3306 mysql

# 限制 CPU 和内存的 Redis 容器
docker run -d --name myredis --memory=512m --cpus=2 -p 6379:6379 redis

# 运行 Python 并挂载当前目录
docker run -it --rm -v $(pwd):/app python:3.9 bash

# 运行 BusyBox 并加入已有容器网络
docker run -it --network=container:mycontainer busybox sh
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

彬彬侠

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值