资讯专栏INFORMATION COLUMN

容器和容器镜像的区别,您真的了解吗

zengdongbao / 3085人阅读

摘要:我们首先来看容器和容器镜像。容器和容器镜像一样,也是若干层的叠加,唯一区别是所有只读层的最上面一层,是一层可读可写层,如上图绿色图例所示。希望这篇文章能帮助大家理解容器和容器镜像的区别。

很多刚刚接触容器技术的朋友,不容易弄清楚容器,容器镜像和Docker这几个词的区别和联系。

我们首先来看容器和容器镜像。举个例子,执行命令行docker search nginx,搜索结果的一条条记录就是一个个容器镜像。

所谓镜像,就是一个静态概念,一个镜像由若干只读层(read-only layer)构成。

上图左边是Docker镜像的内部实现细节,我们能看到多个只读层叠加在一起,层与层之间通过指针关联,这些层能够在运行Docker的宿主机的文件系统上访问到。

Linux的统一文件系统(union file system)技术将这些叠加的只读层合并成一个文件系统,该系统为这些只读层提供了一个统一的视角,从而为Docker的用户隐藏了多层的存在。

从Docker用户的视角出发,一个Docker镜像只存在一个文件系统,即上图右边所示。

这些文件系统的设计是Docker实现细节,一般情况下我们不用去深究。但如果您足够好奇,使用命令sudo tree浏览目录 /var/lib/docker即可:

比如我用命令docker images浏览下载到本地的docker镜像:

其中一个叫jerry-nginx的镜像,是一个web应用,它的所有内容能在/var/lib/docker目录下的这个目录查到:

讲完了容器镜像,我们再来看容器。

容器和容器镜像一样,也是若干层的叠加,唯一区别是所有只读层的最上面一层,是一层可读可写层,如上图绿色图例所示。

初学者可以记住这个简单的公式:容器 = 容器镜像 + 可读可写层

我们如果用命令docker ps --all查看本机所有容器列表,会发现有的容器处于运行状态,有的处于退出状态。

因此,一个处于运行状态的容器(running container)包含一个可读写的文件系统加上隔离的进程空间。

容器里的进程可以对这个可读写文件系统内的文件进行修改、删除、创建等操作。

镜像里每一层其实都能在docker文件夹的containers子目录下找到:

上图每一个红色文件夹代表镜像里的一层,蓝色文件包含了该层运行时的日志文件,或者网络相关配置等。

做个实验:

ubuntu这个容器执行结束后,使用find / -name i042416.txt文件,这说明docker运行时能对宿主机的文件系统进行写操作。

下面分析几个常用的易混淆的命令。

docker create

先看它的帮助文档:

试着执行以下:

产生一个输出id:

7ee10851c3f1e53bbd35e5f196f34de560afa1a20d9bf1ced587630dbcda877b

create创建的容器,状态变为created:

docker create命令给通过命令行传入的容器镜像创建了一个新的可读可写层,从而生成了一个新的容器实例:

然后再执行docker start,输入docker create创建的容器实例ID,就可以启动这个容器实例了。

而docker run其实就是docker create和docker start这两个命令合二为一的版本。

希望这篇文章能帮助大家理解容器和容器镜像的区别。
要获取更多Jerry的原创文章,请关注公众号"汪子熙":

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/27631.html

相关文章

  • 不正宗 docker 入门教程-启动一个容器(1/3)

    摘要:从命名上就知道这是一篇简单粗暴的新手入门教程,为什么要简单粗暴我认为有自学能力的人帮他入门就够了,不能自学的一时半会儿也教不会,不符合入门教程的初衷,建议出门左拐去找找视频教程本章目标大概了解是个什么玩意知道常用的指令参数能启动一个容器不然 从命名上就知道这是一篇简单粗暴的docker新手入门教程, 为什么要简单粗暴? 我认为有自学能力的人帮他入门就够了, 不能自学的一时半会儿也教不会...

    YorkChen 评论0 收藏0
  • 使用Docker统一团队开发环境

    摘要:开场白作为一个技术团队的,你是如何保证成员的开发环境达到公司的标准,或者是你定制的最低要求的如果你的回答是差不多就行了,有问题再说,那么,你已经在给自己挖坑了。好的,成员们开始构建你定制的开发环境了。 开场白 作为一个技术团队的Leader,你是如何保证成员的开发环境达到公司的标准,或者是你定制的最低要求的?如果你的回答是:差不多就行了,有问题再说,那么,你已经在给自己挖坑了。 同事A...

    alin 评论0 收藏0
  • 如何理解LXC与Docker之间主要区别

    摘要:它目前由一个两人的团队领导来自的和。因为目前的架构,应用程序和服务是为正常的多程序操作系统环境设计的,所以需要去寻找一种以的方式来工作或使用工具来支持。是一个告诉如何从镜像用特定的应用程序来创建容器的脚本。公司受到风投支持,积极投入市场。 这篇文章从两个部分来探讨LXC,LXC和Docker的容器托管,以及轻便的容器技术将取代虚拟技术的可能性。 LXC有可能会改变我们如何运行和缩放应用...

    lovXin 评论0 收藏0
  • 三年后,我们从 Docker 转到了 RKT

    摘要:在被纳入后,与之争日趋白热化。一如微软曾经试图通过在中安装来排挤,现在正在尝试将融入到,以此来打击,,和。如同微软确确实实提升了的性能。浏览器突出了微软的优势,所以他们在年内都没有继续开发了。 在 Swarm 被纳入 Docker 1.12后,Swarm 与 K8S 之争日趋白热化。本文作者 Adriaan de Jonge 身为 Xebia CTO ,专精 DevOps 及持续交付,...

    Achilles 评论0 收藏0
  • 一份Docker反方辩论——我还是用Heroku好了

    摘要:那都是老一套了。已死已经没有人用了。现在所有的一切都在容器化,它是未来。这是确保它可靠的唯一方式。我现在需要一个是的,为了稳定性。我猜是规模的对,没错。我明白了,好吧,我懂了。那我来重复一遍确保我领悟了这些。 这是一篇在国外社区非常火的文章。由CircleCI创始人所写,追逐热点新技术的程序员与只想做个简单web应用的程序员对话,Docker到底能否解决简单小应用的问题吗?Herok...

    codeGoogle 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<