Docker 容器文件系统
Dockerfile
是软件的原材料,Docker镜像
是软件的交付品,而Docker容器
则可以认为是软件的运行态。从应用软件的角度来看,Dockerfile、Docker镜像与Docker容器分别代表软件的三个不同阶段,Dockerfile面向开发,Docker镜像成为交付标准,Docker容器则涉及部署与运维,三者缺一不可,合力充当Docker体系的基石。
Docker镜像
Docker镜像是Dockerfile的产物,是Docker容器的前提,大有承前启后之意。Docker技术发展两年有余,相信大家很早就听说过Docker大多采用联合文件系统
(Union Filesystem),为Docker容器提供文件系统服务。
关于Docker镜像,有以下特性:
- 由Dockerfile生成
- 呈现层级结构
- 每层镜像包含:镜像文件以及镜像json元数据信息
Docker容器
Docker容器是Docker镜像的运行态体现。概括而言,就是在Docker镜像之上,运行进程。进程启动的方式有两种,用户即可以选择运行自己另行指定的命令,也可以选择运行Docker镜像内部指定的命令。
Docker容器的文件系统,可以说大部分由Docker镜像来提供。为什么说是大部分呢?其实是有原因的,镜像内容虽多,但依然不是全部。下面,我会带大家看看,Docker镜像中有什么,而Docker容器的哪些内容不在Docker镜像中。
Docker容器文件系统
那就让我们一图看尽Docker容器的文件系统:
上图从一个较为全面的角度阐述了Dockerfile
、Docker镜像
与Docker容器
三者的关系。
Dockerfile体现
Docker容器已经在运行,但是追本溯源,我们依然可以找到Dockerfile的影子。上图中,我们可以发现,Docker容器
依附Docker镜像
,而Docker镜像
的Dockerfile
是这样的:
FROM ubuntu:14.04 ADD run.sh / VOLUME /data CMD ["./run.sh"]
我们可以看到,以上Dockerfile中的每一条命令,都在Docker镜像中以一个独立镜像层的形式存在。
Docker镜像体现
毫无疑问,Docker镜像是由Dockerfile构建而成,我们也可以看到图中下4层被标记为Docker镜像。作为Docker技术的核心,我们必须了解Docker如何构建镜像,以及Docker镜像构建之后的产物是什么。
初次接触Docker,了解层级管理的Docker镜像之后,很容易就认为:每一层Docker镜像中都含有相应的文件系统文件。其实不然,以上Dockerfile中的4条命令,则是一个很好的佐证。
FROM ubuntu:14.04
:设置基础镜像,此时会使用基础镜像ubuntu:14.04的所有镜像层,为简单起见,图中将其作为一个整体展示。
ADD run.sh /
:将Dockerfile所在目录的文件run.sh加至镜像的根目录,此时新一层的镜像只有一项内容,即根目录下的run.sh.
VOLUME /data
:设定镜像的VOLUME,此VOLUME在容器内部的路径为/data。需要注意的是,此时并未在新一层的镜像中添加任何文件,但更新了镜像的json文件,以便通过此镜像启动容器时获取这方面的信息。
CMD ["./run.sh"]
:设置镜像的默认执行入口,此命令同样不会在新建镜像中添加任何文件,仅仅在上一层镜像json文件的基础上更新新建镜像的json文件。Docker容器体现
涉及到Docker容器,便是动态的内容,一切似乎都有了生命。上文曾提及,Docker容器的文件系统中不仅包含Docker镜像。此言不虚,图中的顶上两层,就是Docker为Docker容器新建的内容,而这两层恰恰不属于镜像范畴。
这两层分别为Docker容器的初始层(Init Layer
)与可读写层(Read-Write Layer
),初始层中大多是初始化容器环境时,与容器相关的环境信息,如容器主机名,主机host信息以及域名服务文件等。
再来看可读写层,这一层的作用非常大,Docker的镜像层以及顶上的两层加起来,Docker容器内的进程只对可读写层拥有写权限,其他层对进程而言都是只读的(Read-Only
)。如AUFS等文件系统下,写下层镜像内容即会涉及COW(Copy-on-Write)技术
。另外,关于VOLUME以及容器的hosts、hostname、resolv.conf文件等都会挂载到这里。需要额外注意的是:虽然Docker容器有能力在可读写层看到VOLUME以及hosts文件等内容,但那都仅仅是挂载点,真实内容位于宿主机上。
总结
Docker镜像属静态,Docker容器属动态,两者之间有着千丝万缕的关系。从Docker容器文件系统的角度来认识两者,我相信会对大家有很大的帮助。
Docker镜像以及Docker容器文件系统,绝对是非常细致的内容,基于这些概念,实在有太多有意思的话题可以展开,本系列后续会有以下多篇文章来分析:
1.深刻理解Docker镜像大小
2.其实docker commit很简单
3.不得不说的docker save与docker export区别
4.为什么有些容器文件动不得
5.打破MNT Namespace的容器VOLUME
感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!
《魔兽世界》大逃杀!60人新游玩模式《强袭风暴》3月21日上线
暴雪近日发布了《魔兽世界》10.2.6 更新内容,新游玩模式《强袭风暴》即将于3月21 日在亚服上线,届时玩家将前往阿拉希高地展开一场 60 人大逃杀对战。
艾泽拉斯的冒险者已经征服了艾泽拉斯的大地及遥远的彼岸。他们在对抗世界上最致命的敌人时展现出过人的手腕,并且成功阻止终结宇宙等级的威胁。当他们在为即将于《魔兽世界》资料片《地心之战》中来袭的萨拉塔斯势力做战斗准备时,他们还需要在熟悉的阿拉希高地面对一个全新的敌人──那就是彼此。在《巨龙崛起》10.2.6 更新的《强袭风暴》中,玩家将会进入一个全新的海盗主题大逃杀式限时活动,其中包含极高的风险和史诗级的奖励。
《强袭风暴》不是普通的战场,作为一个独立于主游戏之外的活动,玩家可以用大逃杀的风格来体验《魔兽世界》,不分职业、不分装备(除了你在赛局中捡到的),光是技巧和战略的强弱之分就能决定出谁才是能坚持到最后的赢家。本次活动将会开放单人和双人模式,玩家在加入海盗主题的预赛大厅区域前,可以从强袭风暴角色画面新增好友。游玩游戏将可以累计名望轨迹,《巨龙崛起》和《魔兽世界:巫妖王之怒 经典版》的玩家都可以获得奖励。
更新动态
- 凤飞飞《我们的主题曲》飞跃制作[正版原抓WAV+CUE]
- 刘嘉亮《亮情歌2》[WAV+CUE][1G]
- 红馆40·谭咏麟《歌者恋歌浓情30年演唱会》3CD[低速原抓WAV+CUE][1.8G]
- 刘纬武《睡眠宝宝竖琴童谣 吉卜力工作室 白噪音安抚》[320K/MP3][193.25MB]
- 【轻音乐】曼托凡尼乐团《精选辑》2CD.1998[FLAC+CUE整轨]
- 邝美云《心中有爱》1989年香港DMIJP版1MTO东芝首版[WAV+CUE]
- 群星《情叹-发烧女声DSD》天籁女声发烧碟[WAV+CUE]
- 刘纬武《睡眠宝宝竖琴童谣 吉卜力工作室 白噪音安抚》[FLAC/分轨][748.03MB]
- 理想混蛋《Origin Sessions》[320K/MP3][37.47MB]
- 公馆青少年《我其实一点都不酷》[320K/MP3][78.78MB]
- 群星《情叹-发烧男声DSD》最值得珍藏的完美男声[WAV+CUE]
- 群星《国韵飘香·贵妃醉酒HQCD黑胶王》2CD[WAV]
- 卫兰《DAUGHTER》【低速原抓WAV+CUE】
- 公馆青少年《我其实一点都不酷》[FLAC/分轨][398.22MB]
- ZWEI《迟暮的花 (Explicit)》[320K/MP3][57.16MB]