命令 docker run 和 docker start 的区别是什么?
在 Docker 中,docker run 和 docker start 是两个非常核心但用途完全不同的命令。
简单来说:docker run 用于“创建并启动”一个新容器,而 docker start 用于“重新启动”一个已经存在但已停止的容器。
以下是它们的详细区别和对比:
1. docker run(创建 + 启动)
当你想要从一个镜像(Image)开始,运行一个全新的容器(Container)时,使用这个命令。
- 工作原理:它相当于执行了两个步骤:
docker create:利用镜像创建出一个新的容器。docker start:启动这个刚刚创建的容器。
- 使用场景:第一次运行某个服务(如第一次启动一个 Nginx 服务器或 MySQL 数据库)。
- 常用参数:因为是创建新容器,所以可以配置很多初始参数,例如:
-d:后台运行。-p 8080:80:端口映射。-v /data:/data:挂载数据卷。--name my_container:给容器命名。
- 示例:(这会下载 nginx 镜像,创建一个名为 my_nginx 的容器,并把它运行起来)bash
docker run -d -p 80:80 --name my_nginx nginx
2. docker start(仅启动)
当你之前已经创建过一个容器,但它现在处于停止状态(Exited),你想要再次启动它时,使用这个命令。
- 工作原理:它直接启动一个已经存在的容器,保留该容器之前的状态、数据和配置。
- 使用场景:电脑重启后、或者手动
docker stop某个容器后,想要恢复该容器的运行。 - 特点:
- 它不需要(也不能)指定镜像名称,而是指定容器 ID 或容器名称。
- 它不能在启动时重新配置端口映射(
-p)或挂载目录(-v),它会沿用docker run创建时留下的配置。 - 默认是在后台(background)启动。
- 示例:(这会重新启动之前已经创建好的名为 my_nginx 的容器)bash
docker start my_nginx
对比总结表
| 特性 | docker run |
docker start |
|---|---|---|
| 操作对象 | 镜像 (Image) (例如 nginx) |
容器 (Container) (例如 my_nginx 或 a1b2c3d4) |
| 容器状态 | 创建一个全新的容器并运行 | 启动一个已存在但已停止的容器 |
| 数据变化 | 产生一个全新的容器沙盒,数据是初始状态 | 保留该容器之前运行产生的所有数据和修改 |
| 配置修改 | 可以配置端口、挂载卷、环境变量等 | 无法修改配置,只能沿用创建时的配置 |
| 多次执行 | 每次执行都会创建一个新的容器(占用更多磁盘) | 无论执行多少次,都是启动/恢复同一个容器 |
比喻理解
docker run就像是“买一部新手机并开机”。你每次运行这个命令,都相当于从工厂(镜像)里提了一部全新的手机,里面的设置都是初始化的。docker start就像是“把你口袋里关机的手机重新开机”。手机还是那部手机,里面的照片、APP 和设置都还在。
右滑查看面试常问