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

使用Docker容器

原创
作者头像
风研雨墨
修改于 2018-10-29 09:23:04
修改于 2018-10-29 09:23:04
1.2K00
代码可运行
举报
运行总次数:0
代码可运行

介绍

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
代码运行次数:0
运行
AI代码解释
复制
docker run -ti ubuntu

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
root@11cc47339eel:/#

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
echo "Example1" > /tmp/Example1.txt
cat /tmp/Example1.txt
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Example1

现在,让我们退出容器。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
exit

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
docker ps
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
docker ps -a
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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
代码运行次数:0
运行
AI代码解释
复制
docker run -ti ubuntu

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
cat /tmp/Example1
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
cat: /tmp/Example1: No such file or directory

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
exit

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
docker ps -a
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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
代码运行次数:0
运行
AI代码解释
复制
docker start -ai 11cc47339ee1

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
cat /tmp/Example1.txt
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Example1

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
exit

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

第3步:删除两个容器

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
docker rm 11cc47339ee1 kickass_borg
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
11cc47339ee1
kickass_borg

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

结论

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

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


参考文献:《Working with Docker Containers》

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

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

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

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

评论
登录后参与评论
暂无评论
推荐阅读
Python安装PyGraphics包简
Python还比较年轻,这几个小软件很小,但找齐不那么容易,官网上可能由于对方有部分库遗失下载不下来,各处收集,全部收齐上传在此,且在命名时已按照逐一安装的顺序编好了号,需要的下载下来按序号安装!
py3study
2020/01/09
8270
windows环境下搭建python+nltk开发环境
nltk(Natural Language Tookit)实际上是python的一个开发包。对于自然语言处理任务非常有用。 =============================================================================================== NLTK 2.0官网:http://nltk.org/install.html ==========================================================
NateHuang
2018/03/14
8630
windows环境下搭建python+nltk开发环境
Selenium win7+selenium2.0+python+JetBrains PyCharm环境搭建
担心最新版的支持不太好,这里我下载的是python 2.7(selenium之前不支持python3.x)
授客
2019/09/11
6180
Selenium win7+selenium2.0+python+JetBrains PyCharm环境搭建
Python安装MySQL库详解(解决Microsoft Visual C++ 9.0 is required )
前面我们介绍的Python网络爬虫通常将抓取的数据存储至TXT或CSV文件,而当数据量增加之时,就需要将其存储至本地数据库了。Python访问数据库需要对应的接口程序,我们可以把接口程序理解为Python的一个模块,它提供了数据库客户端的接口供您访问。本文主要讲述Python操作MySQL数据库,通过调用MySQLdb扩展包实现。而在安装过程中会遇到各种各样的错误,这里给出安装MySQL库的详细步骤及错误的解决方法。
统计学家
2019/04/10
1.7K0
Python安装MySQL库详解(解决Microsoft Visual C++ 9.0 is required )
windows python flas
是一个轻量级的Web应用框架, 使用Python编写。基于 WerkzeugWSGI工具箱和 Jinja2模板引擎。Flask使用 BSD 授权。
py3study
2020/01/10
4980
selenium win7+selenium2.0+python环境搭建
担心最新版的支持不太好,这里我下载的是python 2.7(selenium之前不支持python3.x)
授客
2019/09/12
1.2K0
【Python基础】08、Python模
 可以将代码量较大的程序分割成多个有组织的、彼此独立但又能互相交互的代码片段,这些自我包含的有组织的代码段就是模块
py3study
2020/01/06
1.8K0
Python包管理整理:setuptoo
setuptool管理python相关的包 一、介绍 setuptool管理python相关的包的工具。这些包是zip格式发布,但是后缀一般都是.egg setuptool能解决python包的依赖关系 setuptool安装的包默认安装到/usr/local/lib/pythonX.X/site-packages/目录下 下载包默认到http://pypi.python.org/pypi下载 pypi为Python PackageIndex 二、安装setuptool工具 1、rhel/centos #yum -y install python-setuptools 2、freebsd #cd /usr/ports/devel/py-setuptools && make install clean 3、debian/ubuntu #sudo apt-get install python-setuptools 以上使用系统包管理系统安装后需要更新一下: # easy_install -U setuptools 4、通用方式 Download ez_setup.py , and then run: ez_setup.py -Zf http://peak.telecommunity.com/snapshots/ RuleDispatch #fetch http://peak.telecommunity.com/dist/ez_setup.py #python2.7 ez_setup.py python2.7指定版本号,以表示setuptool使用的python版本。未指定版本则使用默认,也表示默认安装的版本是最新版本。 这一约定方便,旧版本也可以继续使用 三、通过easy_install安装python包 (一)普通安装 #easy_install Babel (二)安装本地或网络文件系统中安装egg文件 #easy_install /net/src/eggs/py2.5.egg (三)指定包的下载路径安装 #easy_install http://trac-hacks.org/svn/iniadminplugin/0.11/ #easy_install http://trac-hacks.org/svn/accountmanagerplugin/trunk (四)从URL源码包安装 #easy_install  http://pypi.python.org/simple/asp/asp-0.1.2.4.tar.gz 条件asp-0.1.2.4.tar.gz包中的根目录中必须包括setup.py文件 (五)web上面搜索包,并自动安装 # easy_install -f http://pypi.python.org/simple/ asp (六)指定包的版本 # easy_install asp==0.1.2.1 如果指定的版本高于现有已安装的保本就是升级了 (七)升级包 升级到最新版本(不指定版本就会升级到最新版本 # easy_install -U asp 升级到指定版本 # easy_install -U asp==0.1.2.2 四、认证和配置文件 1、有些需要认证的python站点 easy_install -f http://uid@password@pypi.python.org/simple/packages 2、使用配置文件定义下载的站点和安装的目录 配置文件位置 当前目录/setup.cfg 或当前目录/.pydistutils.cfg 配置文件内容 find-links=http://pypi.python.org/simple/ #特定搜索包的URL allow=*.python.org #搜索的域名 install_dir=/src/lib/python    #这个目录需要在PYTHONPATH中 (sys.path) 更多帮助请看easy_install --help
py3study
2020/01/07
6780
python2.7.12源码编译
下载python源码包:  https://www.python.org/downloads/release/python-2712/ 下载setuptool包:  https://pypi.python.org/pypi/setuptools#code-of-conduct 下载pip包:  http://pypi.python.org/packages/source/p/pip/pip-1.0.tar.gz python官网上说2.7.9之后pip就在默认的包里,反正我发现2.7.12是没
BGBiao
2018/02/26
1.1K0
windows平台python 2.7环境编译安装zbar
最近一个项目需要识别二维码,找来找去找到了zbar和zxing,中间越过无数坑,总算基本上弄明白,分享出来给大家。
黯然销魂掌
2018/09/27
1.1K0
python监控windows的CPU,
有一批windows系统需要监控,无论是zabbix、nagios都需要安装相关插件,操作起来比较麻烦。
py3study
2020/01/07
1.5K0
selenium + python自动化测试环境搭建
-------------------------------------------------------------
流柯
2018/08/30
7450
Python+Selenium2 搭建自动化测试环境
米扑科技的许多项目都用到了爬虫采集网页数据,突破反爬虫、自动化测试、回归测试也要求米扑考虑构建自动化,来提高整个团队的极致工作效率。 由于忙于需求以及产品的流程规范,现在对于测试技术方面的研究也积累了很多。不过不管做什么,做好最重要! 搞自动化主要是出于团队建设考虑,一方面为了提供测试部门的工作效率,保障产品质量;另一方面,也是为了提升团队成员的测试技能,保证Team良性发展。不过不管如何,自动化是必须要搞,不然繁琐的回归测试是没有任何效率保证和质量保障的。 初步计划通过Python作为脚本语言,Selen
阳光岛主
2018/05/17
1.2K0
将打飞机游戏打包成 exe
发现很多朋友在写了 pygame 的打飞机游戏之后,都很想打包成 exe 文件分享给别人玩。但是在打包的过程中,可能遇到一些问题。今天我就来整理一下 pygame 打包 exe 的一些注意事项。 另外,pygame 打飞机游戏的相关资源,包括图片和代码,我放在了论坛的帖子里,需要的朋友可去下载。 在这里,我介绍两种较为常见的打包 exe 工具,cx_freeze 和 py2exe。先说 cx_freeze: cx_freeze 打包的过程比较简单,安装好之后运行一条命令就可以了。基本步骤就是: 1.搜索并下
Crossin先生
2018/04/17
1.5K0
python2.x和python3.x共
   下载完成之后,解压到python3所在的安装目录,用CMD控制台进入解压目录,输入:
py3study
2020/01/08
5130
升级python2.6.6到python
python2.6.6 升级到python2.7.14,此处不再描述 可以参考如下文档升级: https://blog.csdn.net/see_you_see_me/article/details/78550977
py3study
2020/01/08
7240
2018-03-24python3.6.2 Tensorflow环境配置(win10 64位)
一、机器配置 win10 64位 二、软件下载及安装(cmd以管理员身份运行) 1、python下载安装 https://www.python.org/ 版本3.6.2 https://www.pyt
用户1733354
2018/05/22
4790
Python-工具安装
Windows 2003平台,安装Python2.7.4,Python3.3,setuptools,pip,virtualenv。
py3study
2020/01/13
4760
python环境配置
第一步、安装python 的开发环境包,选择需要安装路径进行安装,笔者下载的是目前最新的 python2.7.5版本,安装目录为:C:\Python27。 第二步、安装setuptools 通过前面提供的setuptools 的连接 https://pypi.python.org/pypi/setuptools, 拖动页面到底部找到,https://pypi.python.org/packages/source/s/setuptools/setuptools-12.0.3.tar.gz#md5=f07e4b0f4c1c9368fcd980d888b29a65setuptools-1.3.2.tar.gz    文件(版本随着时间版本会有更新),对文件进行解压,找到ez_install.py 文件,进入windows 命令提示(开始--运行--cmd 命令,回车)下执行ez_install.py: C:\setuptools-1.3>python ez_install.py
py3study
2020/01/10
8190
电脑上同时安装Python2和Pytho
1.1、到Python的官网 https://www.python.org/ 下载Python的安装文件
py3study
2020/01/03
7930
相关推荐
Python安装PyGraphics包简
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文