前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >使用Docker容器

使用Docker容器

原创
作者头像
风研雨墨
修改2018-10-29 17:23:04
1.2K0
修改2018-10-29 17:23:04
举报

介绍

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

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

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

概述

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

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

使用容器

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

第1步:创建两个容器

以下docker run命令将使用基本ubuntu映像创建新容器。 -t会给我们一个终端,并且-i允许我们与它进行互动。我们将依靠在Ubuntu的基本图像的泊坞文件中的默认命令bash,将我们放到一个shell.。

代码语言:javascript
复制
docker run -ti ubuntu

命令行提示符将更改为指示我们以root用户身份位于容器内,后跟12个字符的容器ID。

代码语言:javascript
复制
root@11cc47339eel:/#

我们将通过将一些文本回显到容器的/tmp目录中进行更改,然后使用cat来验证它是否已成功保存。

代码语言:javascript
复制
echo "Example1" > /tmp/Example1.txt
cat /tmp/Example1.txt
代码语言:javascript
复制
Example1

现在,让我们退出容器。

代码语言:javascript
复制
exit

Docker容器在它们发出的命令完成后立即停止运行,因此当我们退出bash shell时,我们的容器停止了。如果我们运行docker ps,显示正在运行的容器的命令,我们将看不到我们的。

代码语言:javascript
复制
docker ps
代码语言:javascript
复制
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES

如果我们添加-a标志,这显示所有容器,停止或运行,那么我们的容器将出现在列表中:

代码语言:javascript
复制
docker ps -a
代码语言:javascript
复制
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”,然后是它运行了多长时间。

如果我们重新运行相同的命令,则会创建一个全新的容器:

代码语言:javascript
复制
docker run -ti ubuntu

我们可以告诉它是一个新容器,因为命令提示符中的ID是不同的,当我们查找Example1文件时,我们将找不到它:

代码语言:javascript
复制
cat /tmp/Example1
代码语言:javascript
复制
cat: /tmp/Example1: No such file or directory

这可能使数据看起来已经消失,但事实并非如此。我们现在将退出第二个容器以查看它,并且我们创建的文件的第一个容器都在系统上。

代码语言:javascript
复制
exit

当我们再次列出容器时,两者都会出现:

代码语言:javascript
复制
docker ps -a
代码语言:javascript
复制
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:

代码语言:javascript
复制
docker start -ai 11cc47339ee1

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

代码语言:javascript
复制
cat /tmp/Example1.txt
代码语言:javascript
复制
Example1

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

代码语言:javascript
复制
exit

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

第3步:删除两个容器

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

代码语言:javascript
复制
docker rm 11cc47339ee1 kickass_borg
代码语言:javascript
复制
11cc47339ee1
kickass_borg

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

结论

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

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


参考文献:《Working with Docker Containers》

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

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

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 介绍
  • 概述
  • 使用容器
  • 第1步:创建两个容器
  • 第2步:重新启动第一个容器
  • 第3步:删除两个容器
  • 结论
相关产品与服务
容器服务
腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档