介绍
Docker是一种流行的容器化工具,用于向软件应用程序提供包含运行所需的所有内容的文件系统。 使用Docker容器确保软件将以相同的方式运行,而不管其部署在哪里,因为它的运行时环境无残忍地一致。
在本教程中,我们将简要介绍Docker镜像和Docker容器之间的关系。 然后,我们将更详细地了解如何运行,启动,停止和删除容器。
概述
我们可以把码头工人的形象 , 这用来创建Docker容器的惰性模板。 映像通常以根文件系统开始,并在有序的只读层中添加文件系统更改及其对应的执行参数。 与典型的Linux发行版不同,Docker镜像通常仅包含运行应用程序所需的必备软件。 图像没有状态,他们不改变。 相反,它们形成了Docker容器的起点。
图像栩栩如生,在docker run
命令,它通过对图像的顶部增加一个读写层创建一个容器 。 只读层的这种组合淋上读写层被称为联合文件系统 。 当对正在运行的容器中的现有文件进行更改时,该文件将从只读空间复制到读写层,在该层中应用更改。 读写层中的版本隐藏了原始文件,但不会删除它。 读写层中的更改只存在于单个容器实例中。 当容器被删除时,任何更改都会丢失,除非采取措施保留它们。
使用容器
每次使用的时候docker run
命令时,它创建一个从指定的图像的新容器。 这可能是一个混乱的来源,所以让我们来看看一些例子:
第1步:创建两个容器
下面docker run
命令将创建一个使用基地的新容器ubuntu
形象。 -t
会给我们一个终端, -i
将使我们能够与它进行交互。 我们将依托在默认的命令Ubuntu的基本图像的泊坞文件 , bash
,我们放到一个外壳。
docker run -ti ubuntu
命令行提示符更改为表示我们作为root用户位于容器内,后跟12个字符的容器ID。
我们将通过回一些文本容器的做出改变/tmp
目录下,然后用cat
来验证它已成功保存。
echo "Example1" > /tmp/Example1.txt
cat /tmp/Example1.txt
OutputExample1
现在,让我们退出容器。
exit
Docker容器在它们发出的命令完成后立即停止运行,因此当我们退出bash shell时,我们的容器停止运行。 如果我们运行docker ps
,命令显示正在运行的容器,我们将不会看到我们的。
docker ps
OutputCONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
如果加上-a
标志,这说明所有的容器,停止或运行,那么我们的容器将出现在列表中:
docker ps -a
OutputCONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
11cc47339ee1 ubuntu "/bin/bash" 6 minutes ago Exited (127) 8 seconds ago small_sinoussi
当容器被创建时,它被赋予其容器ID和随机生成的名称。 在这种情况下,11cc47339ee1是容器ID和small_sinoussi
是随机产生的名称。 ps -a
示出这些值,以及从该容器中构建的图像( ubuntu
),当容器被创建( six minutes ago
) ,并在它运行的命令( /bin/bash
)。 输出还提供了容器(的状态Exited
)和前多久的容器进入该状态( 6 seconds ago
)。 如果容器仍在运行,我们会看到状态“Up”,然后是运行时间。
如果我们重新运行相同的命令,则创建一个全新的容器:
docker run -ti ubuntu
我们可以告诉它是一个新的容器,因为在命令提示符中的ID是不同的,当我们查找我们的Example1文件,我们不会找到它:
cat /tmp/Example1
Outputcat: /tmp/Example1: No such file or directory
这可以使它看起来像数据已经消失了,但事实并非如此。 我们的第一个容器,我们创建的文件,仍然在系统上。
如果我们再次查看容器,都会出现在列表中:
docker ps -a
OutputCONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
6e4341887b69 ubuntu "/bin/bash" About a minute ago Exited (1) 6 seconds ago kickass_borg
11cc47339ee1 ubuntu "/bin/bash" 13 minutes ago Exited (127) 6 minutes ago small_sinoussi
现在我们将退出第二个容器,这样我们可以通过重新启动初始容器来找到我们的更改:
exit
第2步:重新启动第一个容器
要重新启动现有的容器中,我们将使用start
命令的-a
标志附加到它和-i
标志,使之互动,后跟容器ID或名称。 请务必在以下命令中替换容器的ID:
docker start -ai 11cc47339ee1
我们在容器的bash提示符再次找到自己,当我们cat
的文件,我们以前创建的,它仍然存在。
cat /tmp/Example1.txt
OutputExample1
我们现在可以退出容器:
exit
此输出显示容器内的更改通过停止和启动而持续。 只有当容器被删除时,内容才会被删除。 此示例还说明更改仅限于单个容器。 当我们开始第二个容器时,它反映了图像的原始状态。
第3步:删除两个容器
我们创建了两个容器,我们将通过删除它们来完成我们的简短教程。 该docker rm
命令,该命令只能在停止容器一起工作,允许你指定的名称或者一个或多个集装箱的ID,所以我们可以用下面的删除这两个:
docker rm 11cc47339ee1 kickass_borg
Output11cc47339ee1
kickass_borg
这两个容器,以及我们在它们内部所做的任何改变,现在都消失了。
结论
我们已经采取了详细的看一下docker run
命令来看看它是如何自动创建新的容器每次运行的时间。 我们还了解了如何定位已停止的容器,启动它并连接到它。 如果您想了解更多有关管理容器,你可能会感兴趣的指南中, 命名Docker容器:3提示初学者 。