Docker是一种流行的容器化工具,用于为软件应用程序提供包含运行所需内容的文件系统。使用Docker容器可确保软件的行为方式相同,无论其部署位置如何,因为其运行时环境无情一致。
在本教程中,我们将简要概述Docker镜像与Docker容器之间的关系。然后,我们将更详细地了解如何运行,启动,停止和删除容器。
要完成本教程,您需要具备一台已经设置好可以使用sudo
命令的非root账号的服务器,并且已开启防火墙。没有服务器的同学可以在这里购买,不过我个人更推荐您使用免费的腾讯云开发者实验室进行试验,学会安装后再购买服务器。
我们可以将Docker镜像 视为用于创建Docker容器的惰性模板。映像通常以根文件系统开头,并在有序的只读层中添加文件系统更改及其相应的执行参数。与典型的Linux发行版不同,Docker映像通常只包含运行应用程序所必需的基本要素。图像没有状态,也不会改变。相反,它们构成了Docker容器的起点。
使用docker run
命令生成图像,通过在图像顶部添加读写层来创建容器。这种只读层与读写层的组合称为联合文件系统。当对正在运行的容器中的现有文件进行更改时,该文件将从只读空间复制到读写层中,并在其中应用更改。读写层中的版本隐藏原始文件但不删除它。读写层中的更改仅存在于单个容器实例中。删除容器时,除非采取措施保留容器,否则将丢失任何更改。
每次使用docker run
命令时,它都会根据您指定的图像创建一个新容器。这可能是一个混乱的来源,所以让我们看看一些例子:
以下docker run
命令将使用基本ubuntu
映像创建新容器。 -t
会给我们一个终端,并且-i
允许我们与它进行互动。我们将依靠在Ubuntu的基本图像的泊坞文件中的默认命令bash
,将我们放到一个shell.。
docker run -ti ubuntu
命令行提示符将更改为指示我们以root用户身份位于容器内,后跟12个字符的容器ID。
root@11cc47339eel:/#
我们将通过将一些文本回显到容器的/tmp
目录中进行更改,然后使用cat
来验证它是否已成功保存。
echo "Example1" > /tmp/Example1.txt
cat /tmp/Example1.txt
Example1
现在,让我们退出容器。
exit
Docker容器在它们发出的命令完成后立即停止运行,因此当我们退出bash shell时,我们的容器停止了。如果我们运行docker ps
,显示正在运行的容器的命令,我们将看不到我们的。
docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
如果我们添加-a
标志,这显示所有容器,停止或运行,那么我们的容器将出现在列表中:
docker ps -a
CONTAINER 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
)。输出还提供了container(Exited
)的状态以及容器进入该状态(6 seconds ago
)的时间。如果容器仍在运行,我们会看到状态“Up”,然后是它运行了多长时间。
如果我们重新运行相同的命令,则会创建一个全新的容器:
docker run -ti ubuntu
我们可以告诉它是一个新容器,因为命令提示符中的ID是不同的,当我们查找Example1文件时,我们将找不到它:
cat /tmp/Example1
cat: /tmp/Example1: No such file or directory
这可能使数据看起来已经消失,但事实并非如此。我们现在将退出第二个容器以查看它,并且我们创建的文件的第一个容器都在系统上。
exit
当我们再次列出容器时,两者都会出现:
docker ps -a
CONTAINER 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
要重新启动现有容器,我们将使用带有-a
标志的start
命令附加到它,并使用-i
标志使其成为交互式,然后是容器ID或名称。请务必在以下命令中替换容器的ID:
docker start -ai 11cc47339ee1
我们再次发现自己处于容器的bash提示符中,当cat
我们之前创建的文件时,它仍然存在。
cat /tmp/Example1.txt
Example1
我们现在可以退出容器了:
exit
此输出显示容器内的更改通过停止和启动而持续存在。只有在删除容器时才会删除内容。此示例还说明更改仅限于单个容器。当我们启动第二个容器时,它反映了图像的原始状态。
我们已经创建了两个容器,我们将通过删除它们来结束我们的简要教程。该docker rm
命令仅适用于已停止的容器,允许您指定一个或多个容器的名称或ID,因此我们可以使用以下内容删除它们:
docker rm 11cc47339ee1 kickass_borg
11cc47339ee1
kickass_borg
这两个容器以及我们在其中所做的任何更改现在都已消失。
我们详细了解了docker run
命令,了解它每次运行时如何自动创建新容器。我们还看到了如何定位已停止的容器,启动它并连接到它。
想要了解更多关于使用Docker容器的相关教程,请前往腾讯云+社区学习更多知识。
参考文献:《Working with Docker Containers》
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
扫码关注腾讯云开发者
领取腾讯云代金券
Copyright © 2013 - 2025 Tencent Cloud. All Rights Reserved. 腾讯云 版权所有
深圳市腾讯计算机系统有限公司 ICP备案/许可证号:粤B2-20090059 深公网安备号 44030502008569
腾讯云计算(北京)有限责任公司 京ICP证150476号 | 京ICP备11018762号 | 京公网安备号11010802020287
Copyright © 2013 - 2025 Tencent Cloud.
All Rights Reserved. 腾讯云 版权所有