3.0.3 容器镜像

前文中,我们虽然把容器进行了隔离处理,但是它所看到的文件系统在默认情况下是与宿主机相同的。

对此,创建新进程时,除了声明要启用Mount Namespace之外,还必须告诉容器进程,哪些目录需要重新挂载。

当我们在容器启动之前重新挂载它的整个根目录"/"由于Mount Namespace的存在,这个挂载对宿主机不可见,所以容器进程就可以在里面随便折腾了。

在Linux操作系统里,有一个名为chroot的命令可以帮助你在shell中方便地完成这个工作,"change root file system" 改变进程的根目录到指定位置。

Mount Namespace正式基于chroot的不断改良才被发明出来的,也是Linux操作系统里的第一个Namespace。
Docker项目会优先使用pivot_root 系统调用,如果系统不支持
实际上,容器的根目录挂载的是一个完整的操作系统文件,如Ubuntu,这个文件系统就是容器镜像(rootfs 根文件系统)

可以理解成,Docker项目,最核心的原理实际上就是为待创建的用户:
1.启用Linux Namespace配置
2.设置指定的Cgroups参数
3.切换进程的根目录(Change Root)

rootfs只是一个操作系统所包含的文件,配置和目录,并不包含操作系统内核。因此rootfs最多也就几百兆。而传统虚拟机的镜像是一个磁盘的镜像,磁盘有多大,镜像就有多大。

实际上,对于同一台机器上的所有容器,都共享宿主机操作系统的内核。因此如果你的应用程序需要配置内核参数,加载额外的内核模块,以及跟内核直接交互。那么就需要注意这些对于机器上的所有容器都是一个全局变量。

对于A,B两个人用Ubuntu来部署Java应用时,显然希望能够直接使用以前安装过Java环境的rootfs,而不是重生再 生成一遍。

Docker在镜像的设计中,引入了层(layer)的概念,用户制作镜像的每一步操作,都会生成一个层,也就是一个增量rootfs。

Linux下具有,联合文件系统Union File System,最主要功能是将多个不同位置的目录联合挂载到同一个目录下。

Docker环境下采用AuFS,是对原生UnionFS的重写和改进

Docker容器的rootfs结构图:


image.png

第一部分 只读层:
容器的rootfs最下面五层,对应的是ubuntu镜像的五层,挂载方式都是只读的(ro+wh : readonly + whiteout )

第二部分 Init层
夹在只读层和读写层之间,专门用来存放 /etc/hosts, /etc/resolv.conf等信息,
这一层的文件本来属于只读的Ubuntu镜像的一部分,但是用户往往需要在启动容器时写入一些指定的值:(hostname ...)所以需要在可读写层对他们进行修改。
但这些修改往往只对当前容器有效,并不希望执行docker commit时,把这些信息连同可读写层一起提交

第三部分 可读写层:
容器的rootfs的最上面一层,挂载方式为rw 即 read write
为写入前,目录为空,写入后的修改以增量的方式出现在这一层, 删除操作:会创建一个whiteout文件,把只读层里的文件遮挡起来。

例如删除一个foo的文件,删除操作实际上是在可读写层,创建一个名为 .wh.foo 的文件。这样,当这两个层被联合挂载之后,foo文件就会被.wh.foo文件遮挡

最终,这7层被联合挂载到/var/lib/docker/aufs/mnt目录下,表现为一个完整的Ubuntu操作系统供容器使用。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 160,026评论 4 364
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,655评论 1 296
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 109,726评论 0 244
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 44,204评论 0 213
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,558评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,731评论 1 222
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,944评论 2 314
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,698评论 0 203
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,438评论 1 246
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,633评论 2 247
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,125评论 1 260
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,444评论 3 255
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,137评论 3 238
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,103评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,888评论 0 197
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,772评论 2 276
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,669评论 2 271

推荐阅读更多精彩内容