docker run 命令
docker run 简介
docker run
是 Docker 中最常用的命令之一,用于从镜像创建并启动容器。
当用户下达 docker run 指令,Docker 首先会创建(pull)对应的镜像,然后部署容器,最后启动容器。
docker run 是一个复杂的命令,它的格式如下:
docker run [选项] 镜像名 [命令] [命令参数]
docker run 示例
示例1:运行一个 Reference 容器
Reference 是一个计算机技术备忘清单,我们通过 Docker 部署它,就能在浏览器中使用。
部署:
ubuntu@HomeLab:~$ docker run -d -P --restart always wcjiang/reference
540d3b254ed8660f59a60577a0e233a2b959f785d1428f47333a958e869e9fb1
ubuntu@HomeLab:~$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
540d3b254ed8 wcjiang/reference "/busybox httpd -f -…" 4 seconds ago Up 4 seconds 0.0.0.0:32769->3000/tcp, :::32769->3000/tcp mystifying_jang
- -d 后台启动
- -P 自动映射端口
- --restart always 服务器启动时,自动启动该容器
- 在 docker ps 可查看已映射(桥接)的端口,本地32769端口应经映射到容器3000端口
访问:

示例2:运行一个交互式 Ubuntu 容器
部署一个 Ubuntu 容器,临时用用,退出容器后自动销毁:
docker run -it --rm ubuntu bash
- 启动一个临时的 Ubuntu 容器并进入交互式 shell。
- 容器退出后自动删除。
Ubuntu 容器与 Ubuntu 虚拟机的区别:
原理特性 | 容器 | 虚拟机 |
---|---|---|
操作系统层面 | 运行在宿主机的操作系统上,共享宿主机内核 | 运行在虚拟化层上,每个虚拟机有自己的操作系统 |
资源分配 | 动态分配,按需使用宿主机资源 | 静态分配,为每个虚拟机预分配资源 |
启动时间 | 快速启动,通常在毫秒到秒之间 | 启动较慢,通常需要数秒到数分钟 |
隔离机制 | 名字空间(Namespace)和控件组(Cgroups)实现隔离 | 硬件虚拟化技术实现完全隔离 |
系统开销 | 低,因为不需要模拟硬件 | 高,因为需要模拟完整的硬件环境 |
可移植性 | 高,容器镜像可以在不同的宿主机上运行 | 低,虚拟机镜像依赖于特定的虚拟化技术和硬件 |
镜像大小 | 小,通常只有几十MB到几百MB | 大,通常有几个GB |
管理和部署 | 简单快捷,通过容器引擎如Docker | 相对复杂,需要虚拟化管理软件如VMware或OpenStack |
验证:
ubuntu@HomeLab:~$ uname -a
Linux HomeLab 6.11.0-13-generic #14-Ubuntu SMP PREEMPT_DYNAMIC Sat Nov 30 23:51:51 UTC 2024 x86_64 x86_64 x86_64 GNU/Linux
ubuntu@HomeLab:~$ docker run -it --rm ubuntu bash
# 进入ubuntu容器
# 容器与宿主共用内核,所以版本号相同
root@a68481c766c3:/# uname -a
Linux a68481c766c3 6.11.0-13-generic #14-Ubuntu SMP PREEMPT_DYNAMIC Sat Nov 30 23:51:51 UTC 2024 x86_64 x86_64 x86_64 GNU/Linux
# 这个ubuntu容器仅占用84MB,非常精简
root@a68481c766c3:/# du -sh /
84M /
root@a68481c766c3:/# exit
exit
# 退出容器
# ubuntu 容器已经销毁,所以只能看到 reference 容器
ubuntu@HomeLab:~$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
540d3b254ed8 wcjiang/reference "/busybox httpd -f -…" 30 minutes ago Up 30 minutes 0.0.0.0:32769->3000/tcp, :::32769->3000/tcp mystifying_jang
Ubuntu 容器与 Ubuntu 虚拟机的区别:进入容器后,使用 du -sh / 查看系统大小,使用了 84M 比
示例3:运行一个Nginx容器
ubuntu@HomeLab:~$ docker run start -d -P nginx
5e1e65aa227a2f171b8d2df26d757cd4312c6ee3db6962fcaa2213906c2dedcc
ubuntu@HomeLab:~$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
5e1e65aa227a nginx "/docker-entrypoint.…" 4 seconds ago Up 3 seconds 0.0.0.0:32770->80/tcp, :::32770->80/tcp confident_sanderson
540d3b254ed8 wcjiang/reference "/busybox httpd -f -…" About an hour ago Up About an hour 0.0.0.0:32769->3000/tcp, :::32769->3000/tcp mystifying_jang

docker run 选项详细说明
1. 容器运行模式
-
-d
或--detach
:后台运行容器(守护模式)。docker run -d nginx
-
--rm
:容器退出后自动删除。docker run --rm alpine echo "Hello, Docker!"
-
-it
:交互式运行容器(通常与bash
或sh
结合使用)。docker run -it ubuntu bash
2. 容器命名
--name
:为容器指定一个名称(否则 Docker 会随机生成)。docker run --name my-nginx nginx
3. 网络配置
-
-p
或--publish
:映射容器端口到主机端口(格式:主机端口:容器端口
)。docker run -p 8080:80 nginx
-
--network
:指定容器使用的网络(如bridge
、host
或自定义网络)。docker run --network my-network nginx
4. 数据卷挂载
-
-v
或--volume
:挂载主机目录或卷到容器(格式:主机路径:容器路径
)。docker run -v /host/data:/container/data nginx
-
--mount
:更灵活的挂载方式(支持更多选项)。docker run --mount type=bind,source=/host/data,target=/container/data nginx
5. 环境变量
-
-e
或--env
:设置容器内的环境变量。docker run -e MY_ENV=value nginx
-
--env-file
:从文件加载环境变量。docker run --env-file .env nginx
6. 资源限制
-
--memory
:限制容器内存使用(如512m
或2g
)。docker run --memory="512m" nginx
-
--cpus
:限制容器使用的 CPU 核数。docker run --cpus="1.5" nginx
7. 其他常用选项
-
--restart
:设置容器重启策略(如no
、on-failure
、always
)。docker run --restart always nginx
-
--privileged
:赋予容器特权模式(访问主机设备等)。docker run --privileged nginx
-
--user
:指定运行容器的用户(如root
或1000
)。docker run --user 1000 nginx
docker run 常用命令总结
docker run
是 Docker 的核心命令,通过组合不同的选项可以实现复杂的容器运行需求。掌握常用选项后,可以灵活应对各种场景。
# 格式
docker run [OPTIONS] IMAGE [COMMAND] [ARG...]
# 创建、启动容器
docker run hello-world
# 后台启动、分配网口、命名容器
docker run -d -p 80:80 --name my_nginx nginx
# 启动时执行命令,防止退出
docker run -it -d ubuntu /bin/bash
# 设置容器自动重启策略
docker run --restart unless-stopped 镜像名
# 数据持久化(映射本机目录到容器,删除容器后目录依然存在本机)
docker run -v /host/path:/container/path 镜像名
# 设置环境变量
docker run -e VAR_NAME=value 镜像名
# 获取帮助
docker run --help