使用Docker容器

介绍

Docker是一种流行的容器化工具,用于为软件应用程序提供包含运行所需内容的文件系统。使用Docker容器可确保软件的行为方式相同,无论其部署位置如何,因为其运行时环境无情一致。

在本教程中,我们将简要概述Docker镜像与Docker容器之间的关系。然后,我们将更详细地了解如何运行,启动,停止和删除容器。

要完成本教程,您需要具备一台已经设置好可以使用sudo命令的非root账号的服务器,并且已开启防火墙。没有服务器的同学可以在这里购买,不过我个人更推荐您使用免费的腾讯云开发者实验室进行试验,学会安装后再购买服务器

概述

我们可以将Docker镜像 视为用于创建Docker容器的惰性模板。映像通常以根文件系统开头,并在有序的只读层中添加文件系统更改及其相应的执行参数。与典型的Linux发行版不同,Docker映像通常只包含运行应用程序所必需的基本要素。图像没有状态,也不会改变。相反,它们构成了Docker容器的起点。

使用docker run命令生成图像,通过在图像顶部添加读写层来创建容器。这种只读层与读写层的组合称为联合文件系统。当对正在运行的容器中的现有文件进行更改时,该文件将从只读空间复制到读写层中,并在其中应用更改。读写层中的版本隐藏原始文件但不删除它。读写层中的更改仅存在于单个容器实例中。删除容器时,除非采取措施保留容器,否则将丢失任何更改。

使用容器

每次使用docker run命令时,它都会根据您指定的图像创建一个新容器。这可能是一个混乱的来源,所以让我们看看一些例子:

第1步:创建两个容器

以下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

第2步:重新启动第一个容器

要重新启动现有容器,我们将使用带有-a标志的start命令附加到它,并使用-i标志使其成为交互式,然后是容器ID或名称。请务必在以下命令中替换容器的ID:

docker start -ai 11cc47339ee1

我们再次发现自己处于容器的bash提示符中,当cat我们之前创建的文件时,它仍然存在。

cat /tmp/Example1.txt
Example1

我们现在可以退出容器了:

exit

此输出显示容器内的更改通过停止和启动而持续存在。只有在删除容器时才会删除内容。此示例还说明更改仅限于单个容器。当我们启动第二个容器时,它反映了图像的原始状态。

第3步:删除两个容器

我们已经创建了两个容器,我们将通过删除它们来结束我们的简要教程。该docker rm命令仅适用于已停止的容器,允许您指定一个或多个容器的名称或ID,因此我们可以使用以下内容删除它们:

docker rm 11cc47339ee1 kickass_borg
11cc47339ee1
kickass_borg

这两个容器以及我们在其中所做的任何更改现在都已消失。

结论

我们详细了解了docker run命令,了解它每次运行时如何自动创建新容器。我们还看到了如何定位已停止的容器,启动它并连接到它。

想要了解更多关于使用Docker容器的相关教程,请前往腾讯云+社区学习更多知识。


参考文献:《Working with Docker Containers》

原创声明,本文系作者授权云+社区发表,未经许可,不得转载。

如有侵权,请联系 yunjia_community@tencent.com 删除。

编辑于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏IT笔记

Docker学习之CentOS 7安装配置

Docker 是一个开源工具,它可以让创建和管理 Linux 容器变得简单。容器就像是轻量级的虚拟机,并且可以以毫秒级的速度来启动或停止。Docker 帮助系统...

1.2K90
来自专栏编码前线

使用Dockerfile创建docker镜像

18630
来自专栏云计算教程系列

如何在CentOS 7上安装和使用Docker

Docker是一个应用程序,它使得在容器中运行应用程序进程变得简单易行,就像虚拟机一样,只是更便携,更加资源友好,更依赖于主机操作系统。

74400
来自专栏云计算教程系列

如何在Debian 9上安装和使用Docker

Docker是一个简化容器中应用程序进程管理过程的应用程序。容器允许您在资源隔离的进程中运行应用程序。它们与虚拟机类似,但容器更便携,更加资源友好,并且更依赖于...

7.2K50
来自专栏Janti

每天学一点Docker(1)

Docker能做些什么? 1.docker能够解决虚拟机能够解决的问题 2.隔离应用依赖 3.创建应用镜像并复制 4.创建容易分发的即启即用的应用 5.dock...

41870
来自专栏微服务

Docker的核心概念,镜像操作

简介 在实际使用Docker的过程中,遇到一些问题,但是总没有系统的博文可以详细的介绍Docker,所以个人写一个由浅入深的系统学习Docker过程。 这里首...

41980
来自专栏康怀帅的专栏

Docker 网络

本文介绍 Docker 网络。 官方文档:https://docs.docker.com/engine/userguide/networking/ 网络类型 b...

40040
来自专栏Java 源码分析

Docker 入门

27560
来自专栏编程坑太多

『中级篇』Dockerfile实战(19)

14230
来自专栏编程坑太多

『中级篇』Dockerfile实战(19)

17360

扫码关注云+社区

领取腾讯云代金券