Docker run vs create

Fre*_*iot 82 docker

docker rundocker create命令有什么区别?

我经常使用run但有时在我看到的文档中create.

码头工人--help告诉

create    Create a new container
run       Run a command in a new container
Run Code Online (Sandbox Code Playgroud)

这是否意味着run在我们需要将命令传递给新容器时使用?那么目的是create什么?

DAX*_*lic 91

来自docker 文档

docker create命令在指定的映像上创建可写容器层,并准备运行指定的命令.然后将容器ID打印到STDOUT.这类似于docker run -d,但容器从未启动过.然后,您可以使用docker start命令在任何位置启动容器.

这是时非常有用,你要建立一个容器配置提前 的时间,以便它准备好,当你需要它来启动.创建新容器的初始状态.

  • 强调相似性,--run 接受与--create 相同的所有参数(仅添加--detach、--detach-keys 和--sig-proxy),请参阅https://docs.docker.com /v17.09/engine/reference/commandline/run/#options (3认同)

小智 91

从技术上讲,docker run= docker create+ docker start.

  • 实际上,我花了几个小时来学习这一点,`docker run` =`docker create` +`docker start` +`docker attach`。没有`attach`,启动的容器在后台运行 (16认同)

sta*_*fry 9

其他答案涵盖了这一点,但我想我会显示等效的 shell 命令行,因为它非常清楚:

$ docker run myimage
Run Code Online (Sandbox Code Playgroud)

是相同的

$ docker start -a $(docker create myimage)
Run Code Online (Sandbox Code Playgroud)

在这里,docker create用于从命名图像创建容器并输出创建的容器 iddocker start用于使用该 id 启动容器。该-a选项会导致终端附加,以便容器在前台运行,这是docker run.

已创建但从未启动的容器将具有Created状态;这可以通过docker container ls -a.


aar*_*lhe 8

我是 docker 新手,刚开始玩它;

我的看法是docker run基本上执行以下操作:(按……的顺序)docker createdocker startdocker attach,因为它会在您执行“运行”命令后立即附加到活动 shell 。


Lor*_*ord 7

创建一个容器:

在此输入图像描述

启动一个容器:

在此输入图像描述

使用单个命令创建并启动:

在此输入图像描述

现在要理解,我们必须深入挖掘“创建”和“开始”。

创建容器的过程是从映像中获取文件系统,并准备好在新容器中使用。当我们创建容器时,我们只是准备或设置文件系统快照以用于创建容器以实际启动容器。 在此输入图像描述

因此,创建容器是关于文件系统的启动,它是关于实际执行启动命令。为了启动容器,我们实际上执行可能启动进程的启动命令。

让我们在终端中查看它:当我运行命令“sudo docker create hello-world”时,它会打印以下输出。 在此输入图像描述

在输出中我们看到打印出的字符。这是刚刚创建的容器的 ID,现在我可以通过运行 Docker start 在该容器内实际执行 hello world 命令。 在此输入图像描述

那么这里发生了什么,首先我们通过准备好文件系统来支撑容器。然后,我们实际上使用 Docker start 执行了主要启动命令。

docker start 命令中的-a用于监视容器的输出并将其打印到终端。

所以 Docker run 和 docker start 之间的区别非常小,默认情况下 Docker run 会显示所有日志或来自容器的所有信息。默认情况下,Docker 启动是相反的,Docker 启动不会向您显示来自终端的信息。

现在您知道何时需要使用运行/创建/启动