Docker Run,Start和Create 的区别

时间:2020-03-05 15:26:34  来源:igfitidea点击:

如果我们是Docker的新手并通过阅读各种教程来学习它,则可能会遇到诸如启动docker容器,运行docker容器或者创建docker容器之类的术语。

这些术语足以使Docker感到困惑,因为所有三个docker命令看起来都相似。

实际上,很难说出docker run和docker start之间的区别。

Docker运行,Docker启动和Docker创建之间的区别

这些命令的作用如下:

Docker create命令从docker镜像创建一个新的新容器。
但是,它不会立即运行。

Docker start命令将启动任何已停止的容器。
如果使用docker create命令创建容器,则可以使用此命令启动它。

Docker run命令是create和start的组合,因为它创建一个新容器并立即启动它。
实际上,如果docker run命令在系统上找不到所提到的镜像,它甚至可以从Docker Hub中提取镜像。

让我们看一下例子

如果要遵循示例,请确保已安装Docker。

假设我们是使用docker pull ubuntu命令从Docker Hub下载Ubuntu镜像的。

我们可以在系统上看到所有可用的docker镜像。
在此示例中,我只有ubuntu(为避免混淆):

Hyman@theitroad:~$docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
ubuntu              latest              775349758637        5 weeks ago         64.2MB

现在,使用docker create命令创建一个名为container-1的新Docker容器:

Hyman@theitroad:~$docker create --name container-1 ubuntu
2d9a8c190e6c9b3cbbc032a87762bfbc92f1dc0dd30abbe9bdb3ed7e74a6480f

我们可以看到它已经创建了一个新容器。
如果我们尝试查看所有正在运行的容器,则不会看到容器1,因为尽管它已创建,但从未启动。

Hyman@theitroad:~$docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES

如果我们检查所有容器,无论它们是否正在运行,我们都会看到container-1的状态为“已创建”:

Hyman@theitroad:~$docker ps -a
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
2d9a8c190e6c        ubuntu              "/bin/bash"         18 seconds ago      Created                                 container-1

现在,我们使用docker run命令创建并运行一个名为container-2的容器:

Hyman@theitroad:~$docker run -it -d --name container-2 ubuntu bash
13dc0f4226dc8d9d86e41d927c5616654d8263da2cc8c667aaa5b4dbd7f7e9b3

我们可以看到container-2正在运行,因为其状态为Up:

Hyman@theitroad:~$docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED              STATUS              PORTS               NAMES
13dc0f4226dc        ubuntu              "bash"              About a minute ago   Up About a minute                       container-2

让我们停止这个正在运行的容器:

Hyman@theitroad:~$docker stop container-2
container-2
Hyman@theitroad:~$docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
Hyman@theitroad:~$docker ps -a
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS                      PORTS               NAMES
13dc0f4226dc        ubuntu              "bash"              2 minutes ago       Exited (0) 28 seconds ago                       container-2
2d9a8c190e6c        ubuntu              "/bin/bash"         3 minutes ago       Created                                         container-1

现在我们有了一个停止的容器,我们可以使用docker start命令再次启动它:

Hyman@theitroad:~$docker start container-2
container-2
Hyman@theitroad:~$docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
13dc0f4226dc        ubuntu              "bash"              2 minutes ago       Up 2 seconds                            container-2

但是使用docker create命令创建的container-1会发生什么情况?
我们可以使用docker start命令启动此容器,然后使用docker exec对其运行特定的操作。