docker run 和 docker create 命令有什么区别?
我通常使用 run,但有时在文档中看到 create。
Docker 的 --help
告诉:
create Create a new container
run Run a command in a new container
这是否意味着当我们需要向新容器传递命令时使用 run
?那么 create
的目的是什么呢?
docker run 和 docker create 命令有什么区别?
我通常使用 run,但有时在文档中看到 create。
Docker 的 --help
告诉:
create Create a new container
run Run a command in a new container
这是否意味着当我们需要向新容器传递命令时使用 run
?那么 create
的目的是什么呢?
docker run
= docker create
+ docker start
.
从docker 文档中:
docker create命令在指定的镜像上创建一个可写的容器层,并准备运行指定的命令。然后将容器ID打印到STDOUT。 这类似于使用 docker run -d ,但容器永远不会启动。您随后可以使用docker start命令在任何时候启动容器。
当您希望提前设置容器配置以便在需要时就绪时,这很有用。新容器的初始状态已被创建。
docker create
命令 从镜像创建一个可写的容器,并准备运行。
docker run
命令 创建容器(与 docker create
相同)并且 启动它。
$ docker run myimage
等同于
$ docker start -a $(docker create myimage)
这里使用docker create
从指定的镜像创建一个容器,并输出创建的容器ID,接着使用docker start
命令来启动该容器。选项-a
会附加终端,从而使容器在前台运行,这是docker run
命令的默认行为。
如果一个容器已经被创建但从未被启动过,它将具有Created
状态;可以用docker container ls -a
命令查看它。
创建容器:
启动容器:
使用单个命令创建和启动容器:
现在,我们必须深入了解创建和启动过程。
创建容器的过程就是从镜像中获取文件系统,并为在新容器中使用做准备。当我们创建容器时,我们只是准备或设置文件系统快照以用于实际启动容器。
因此,创建容器涉及到文件系统,而启动容器则实际上执行启动命令。 实际上,要启动容器,我们需要执行启动命令,这可能会启动进程。
在终端中查看:
当我运行命令“sudo docker create hello-world”时,它会打印以下输出。
在输出中,我们看到打印出的字符。这是刚刚创建的容器的ID,现在我可以通过运行Docker start在该容器内执行hello world命令。
因此,在此处发生了什么,首先,我们准备容器,并使文件系统准备就绪。 然后,在此之后,我们使用Docker start实际上执行了主要的启动命令。
-a 在docker start命令中用于观察容器的输出并将其打印到您的终端。
因此,Docker run和docker start之间的差异非常小,默认情况下,Docker run将向您显示来自容器的所有日志或所有信息。默认情况下,Docker start则相反,不会向您显示来自终端的信息。
现在您知道何时需要使用Run / Create / Start。
Docker run 命令主要用于在容器中运行命令。
docker run -it <Container Name> /bin/bash
docker create -d /var/lib:/var/lib --name docker-ubuntu ubuntu
docker run -it <容器名称>
而不需要再运行 /bin/bash。例如,Ruby 容器会自动运行一个名为 irb 的可执行文件。此外,你也可以使用 run -d
命令来启动 dockersamples/static-site 容器,该容器不需要登录。因此,我认为它并不是执行 exec 命令,而是直接启动容器。 - barlop
docker run
=docker create
+docker start
+docker attach
。如果没有attach
,启动的容器将在后台运行。 - webbower