Docker运行与创建


92

docker rundocker create命令有什么区别?

我通常使用,run但有时在文档中看到create

Docker的--help告诉

create    Create a new container
run       Run a command in a new container

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

Answers:


104

从Docker 文档

docker create命令在指定图像上创建可写容器层,并为运行指定命令做准备。然后将容器ID打印到STDOUT。这与docker run -d 相似,除了容器从不启动。然后,您可以随时使用docker start命令启动容器。

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


2
强调相似之处,--run接受与--create相同的所有参数(仅添加了--detach,--detach-keys和--sig-proxy),请参阅docs.docker.com/v17.09 / engine / reference / commandline / run /…
Marvin

113

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


40
实际上,我花了几个小时来学习这个,docker run= docker create+ docker start+ docker attach。没有attach,启动的容器将在后台运行
webbower

19

1
U写道:“ docker run创建容器(与docker create相同)并运行它。” <-循环定义,您还没有确定exec和start之间的区别,也就是您所谓的“运行它”。(并且当您说“运行”时,如果我们在docker run中查看您对run的定义,则意味着创建并运行,因此最终将得到无穷大。 “运行”。但是您应该将“运行”与exec和start区别开,这是指start和exec还是刚刚启动)。也许-d表示不执行。没有-d是启动和执行
barlop

8

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

$ docker run myimage

是相同的

$ docker start -a $(docker create myimage)

在此,docker create用于根据命名图像创建容器,并输出创建的容器IDdocker start并用于使用该ID启动容器。该-a选项使终端连接,以便容器在前台运行,这是默认行为docker run

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


6

我是Docker的新手,刚开始玩它。

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


1
在我注意到您的答案之前,刚刚在上面发表了对此的评论。我希望我一个小时左右就已经看过了。
webbower19年

-3

Docker运行基本上是用于在容器中运行命令。

docker run -it <Container Name> /bin/bash

上面是用于创建bash终端的。并让我们在容器中使用bash命令。

Docker create是根据Docker Image创建一个容器。

docker create -d /var/lib:/var/lib --name docker-ubuntu ubuntu

上面是从镜像“ ubuntu”创建一个名为“ docker-ubuntu”的容器


1
您可以不做docker run -it <Container name>/ bin / bash 就可以这样做。例如,ruby将自动运行一个名为irb的可执行文件。另外,您可以运行-d,这是通过未登录的dockersamples / static-site完成的。所以我认为它不执行,而只是启动它。
barlop

如果已经创建了容器,则可以使用“ docker run”运行,如果没有创建,则可以运行然后运行
Sergii Getman
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.