运行和启动Docker容器之间的区别

在实践中,我启动一个容器:docker run a8asd8f9asdf0

如果是这样的话,那么:“docker开始”呢?

在手册中说, 启动一个或多个停止的容器

困惑。

  • run运行一个图像
  • start启动一个容器

docker run文件确实提到:

docker run命令首先在指定的映像上创build一个可写容器层,然后使用指定的命令启动它。

也就是说,docker运行相当于API /containers/create then /containers/(id)/start

你不运行一个现有的容器,你是docker exec(自docker 1.3以来) 。
您可以重新启动退出的容器 。

这是非常重要的问题,答案非常简单但非常重要

  1. 运行:创build一个新的图像容器并执行该容器,可以创build同一图像的N克隆。 命令是“运行IMAGE_ID” 而不是 “CONTAINER_ID”

在这里输入图像说明

  1. 开始:启动一个先前停止的容器,例如,如果用命令“停止CONTAINER_ID”停止了一个数据库,则可以通过命令“START CONTAINER_ID”来关联同一个容器,并且数据和设置是相同的。

在这里输入图像说明

如果你问这个问题,那么图像和图层创build这些图像的基本概念还不清楚。

首先阅读这个链接上的答案, 其中总结了层和图像之间的差异

一旦你了解了这个概念,你就可以更好地理解VonC上面的优秀但高层次的答案。

举例说明:

考虑你的电脑中有一个游戏(iso)的图像。

当您“运行”(将您的映像安装为虚拟驱动器)时,虚拟驱动器将与虚拟驱动器中的所有游戏内容一起创build,游戏安装文件将自动启动。 [运行你的docker镜像 – 创build一个容器,然后启动它。]

但是当你“停止”(类似于docker stop)时,虚拟驱动器仍然存在,但是停止所有进程。 [容器一直存在直到不被删除]

而当你做“开始”(类似于docker开始)时,从虚拟驱动器开始执行游戏文件。 [启动现有容器]

在这个例子中 – 游戏图像是你的Docker镜像,虚拟驱动器是你的容器