【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=<策略> | 容器重启策略(no ,always ,unless-stopped ,on-failure ) |
--network=<网络模式> | 指定网络模式(bridge 、host 、none 、container: ) |
--privileged | 以特权模式运行,允许访问宿主机设备 |
--cpus= | 限制 CPU 核心数(如 --cpus=2.5 ) |
--memory= | 限制容器内存使用(如 --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= | 限制 CPU 核心数(如 --cpus=2 ) |
--memory= | 限制容器的最大内存(如 --memory=512m ) |
--memory-swap= | 限制 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 地址(仅适用于自定义网络) |
📌 示例:
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