介绍
Docker 是一个流行的集装箱化工具,用于提供软件应用程序的文件系统,其中包含他们运行所需的一切。
在本教程中,我们将简要概述Docker图像和Docker容器之间的关系,然后,我们将更详细地了解如何运行,启动,停止和删除容器。
概览
我们可以将 Docker 图像视为用于创建 Docker 容器的惰性模板。图像通常从根文件系统开始,并将文件系统的变化和相应的执行参数添加到排序且只能读的层中。
图像通过docker run
命令来生存,该命令通过在图像顶部添加一个读写层来创建一个 容器。这种与读写层顶部的仅读写层的组合被称为 union 文件系统。当在运行容器中对现有文件进行更改时,该文件会从仅读写空间中复制到读写层中,在那里应用这些更改。读写层中的版本会隐藏原始文件,但不会删除它。
与集装箱合作
每次你使用docker run
命令,它会从你指定的图像中创建一个新的容器。
步骤1:创建两个容器
下面的docker run
命令将使用基础ubuntu
图像创建一个新的容器。-t
将给我们一个终端,而-i
将允许我们与它进行交互。
1[environment local]
2docker run -ti ubuntu
命令行提示更改,表示我们作为根用户在容器内部,然后是12个字符的容器ID。
1[environment second]
我们将通过将某些文本回响到容器的 /tmp' 目录中进行更改,然后使用
cat' 来验证它是否已成功保存。
1[environment second]
2echo "Example1" > /tmp/Example1.txt
3cat /tmp/Example1.txt
1[secondary_label Output]
2[environment second]
3Example1
现在,让我们走出容器。
1[environment second]
2exit
Docker 容器停止运行,一旦发出的命令完成,所以当我们离开 bash 壳时,我们的容器停止运行。
1[environment local]
2docker ps
1[secondary_label Output]
2[environment local]
3CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
如果我们添加-a
旗,显示 all 容器,停止或运行,那么我们的容器将出现在列表中:
1[environment local]
2docker ps -a
1[secondary_label Output]
2[environment local]
3CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
411cc47339ee1 ubuntu "/bin/bash" 6 minutes ago Exited (127) 8 seconds ago small_sinoussi
在这种情况下,11cc47339ee1是容器ID和small_sinoussi
是随机生成的名称。 ps -a
显示了这些值,以及容器创建的图像(ubuntu
),当容器创建时(六分钟前
)和运行在其中的命令(/bin/bash
)。
如果我们重新运行相同的命令,则会创建一个全新的容器:
1[environment local]
2docker run -ti ubuntu
我们可以说这是一个新的容器,因为命令提示中的ID是不同的,当我们搜索我们的Example1文件时,我们不会找到它:
1[environment third]
2cat /tmp/Example1
1[secondary_label Output]
2[environment third]
3cat: /tmp/Example1: No such file or directory
这可能会使它看起来像数据已经消失了,但不是这样。我们现在将离开第二个容器,看看它,以及我们创建的文件的第一个容器,都在系统上。
1[environment third]
2exit
当我们再次列出容器时,两者都出现:
1[environment local]
2docker ps -a
1[secondary_label Output]
2[environment local]
3CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
46e4341887b69 ubuntu "/bin/bash" About a minute ago Exited (1) 6 seconds ago kickass_borg
511cc47339ee1 ubuntu "/bin/bash" 13 minutes ago Exited (127) 6 minutes ago small_sinoussi
步骤2:重新启动第一个集装箱
要重新启动现有容器,我们将使用开始
命令与-a
旗帜附加到它和-i
旗帜使其互动,然后是容器ID或名称。
1[environment local]
2docker start -ai 11cc47339ee1
我们再次发现自己在容器的 bash 提示,当我们捕捉
我们之前创建的文件时,它仍然存在。
1[environment second]
2cat /tmp/Example1.txt
1[secondary_label Output]
2[environment second]
3Example1
我们现在可以离开容器:
1[environment second]
2exit
此输出显示,容器内部所做的更改在停止和启动时仍然存在。只有当容器被移除时,内容才会被删除。
步骤三:删除两个容器
我们已经创建了两个容器,我们将通过删除它们来完成我们的简短教程。docker rm
命令,它只适用于停止的容器,允许您指定一个或多个容器的名称或ID,因此我们可以通过以下方式删除两者:
1[environment local]
2docker rm 11cc47339ee1 kickass_borg
1[secondary_label Output]
2[environment local]
311cc47339ee1
4kickass_borg
两个容器,以及我们内部所做的任何更改,现在已经消失了。
结论
我们仔细查看了docker run
命令,看看它如何在每次运行时自动创建一个新容器。我们还看到如何找到一个停止的容器,启动它,并连接到它。