基于本文回答

播面 播面

文解图解播客视频,多维讲透八股文
0
评论

命令 docker run 和 docker start 的区别是什么?

在 Docker 中,docker rundocker start 是两个非常核心但用途完全不同的命令。

简单来说:docker run 用于“创建并启动”一个新容器,而 docker start 用于“重新启动”一个已经存在但已停止的容器。

以下是它们的详细区别和对比:


1. docker run(创建 + 启动)

当你想要从一个镜像(Image)开始,运行一个全新的容器(Container)时,使用这个命令。

  • 工作原理:它相当于执行了两个步骤:
    1. docker create:利用镜像创建出一个新的容器。
    2. docker start:启动这个刚刚创建的容器。
  • 使用场景:第一次运行某个服务(如第一次启动一个 Nginx 服务器或 MySQL 数据库)。
  • 常用参数:因为是创建新容器,所以可以配置很多初始参数,例如:
    • -d:后台运行。
    • -p 8080:80:端口映射。
    • -v /data:/data:挂载数据卷。
    • --name my_container:给容器命名。
  • 示例
    bash
    docker run -d -p 80:80 --name my_nginx nginx
    (这会下载 nginx 镜像,创建一个名为 my_nginx 的容器,并把它运行起来)

2. docker start(仅启动)

当你之前已经创建过一个容器,但它现在处于停止状态(Exited),你想要再次启动它时,使用这个命令。

  • 工作原理:它直接启动一个已经存在的容器,保留该容器之前的状态、数据和配置。
  • 使用场景:电脑重启后、或者手动 docker stop 某个容器后,想要恢复该容器的运行。
  • 特点
    • 它不需要(也不能)指定镜像名称,而是指定容器 ID容器名称
    • 不能在启动时重新配置端口映射(-p)或挂载目录(-v),它会沿用 docker run 创建时留下的配置。
    • 默认是在后台(background)启动。
  • 示例
    bash
    docker start my_nginx
    (这会重新启动之前已经创建好的名为 my_nginx 的容器)

对比总结表

特性 docker run docker start
操作对象 镜像 (Image) (例如 nginx) 容器 (Container) (例如 my_nginxa1b2c3d4)
容器状态 创建一个全新的容器并运行 启动一个已存在但已停止的容器
数据变化 产生一个全新的容器沙盒,数据是初始状态 保留该容器之前运行产生的所有数据和修改
配置修改 可以配置端口、挂载卷、环境变量等 无法修改配置,只能沿用创建时的配置
多次执行 每次执行都会创建一个的容器(占用更多磁盘) 无论执行多少次,都是启动/恢复同一个容器

比喻理解

  • docker run 就像是“买一部新手机并开机”。你每次运行这个命令,都相当于从工厂(镜像)里提了一部全新的手机,里面的设置都是初始化的。
  • docker start 就像是“把你口袋里关机的手机重新开机”。手机还是那部手机,里面的照片、APP 和设置都还在。