结合Linux系统知识谈谈Docker运行机制

摘要:docker与传统虚拟机的区别在于隔离级别,传统虚拟机是在系统之上运行一个新系统,隔离级别是系统级别的,docker使用回原来系统的内核,只是进程与宿主主机隔离了。如图:

docker:

image.png

虚拟主机:

image.png

那docker是如何工作的呢?我们从三个方面着手去解释其中的运行机制。

  1. 进程是如何隔离的?
  2. 如何限制进程使用的资源?
  3. 数据/环境是怎么存储的?

进程隔离

我们都知道docker里的进程 和外界的进程是一致的,你无论是在容器里还是在宿主主机,在使用top命令查询进程列表,都可以查到这个容器PID相同,docker容器实质就是物理机的一个进程,至于容器里的进程会被隔离是因为linux本身的机制Namespace,在创建容器进程时,指定了这个进程所需要启用的一组 Namespace 参数。这样,容器就只能“看”到当前 Namespace 所限定的资源、文件、设备、状态,或者配置。而对于宿主机以及其他不相关的程序,它就完全看不到了,Namespace 技术实际上修改了应用进程看待整个计算机“视图”,即它的“视线”被操作系统做了限制,只能“看到”某些指定的内容

image.png

基于 Linux Namespace 的隔离机制相比于虚拟化技术也有很多不足之处,其中最主要的问题就是:隔离得不彻底
在 Linux 内核中,有很多资源和对象是不能被 Namespace 化的,最典型的例子就是:时间,你在容器内的时间和宿主主机的时间是一致的,要改大家一起改,以及你所用的系统采用不同版本的linux内核也不一定兼容,不过这些微小的缺陷丝毫不影响docker发光发热

image.png

限制资源

如上述所说,容器是一种特殊的存在宿主主机的进程,这就意味着他共享着宿主主机的cpu,内存,io等资源,如果不加限制会导致容器例如突然暂CPU 100%的各种情况,docker作为软件是无法限制系统资源的,无非也是通过Linux提供的Cgroups文件组,linux会根据该文件组下的限制类型所配置的PID进行资源的限制

/sys/fs/cgroup/cpu

/sys/fs/cgroup/memory

/sys/fs/cgroup/...

在docker上我们只要执行:

docker run --memory 2048m ... //限制内存 2048

数据/环境存储

就算有Namespace 的作用是“隔离”,但无论系统进程或者子进程,执行shell命令的rootfs(根文件系统)都是同一个,而通过pivot_root或chroot命令指定就可以改变运行指令的根目录,如果你没挂载出来,docker就默认把你的根目录挂载到和容器的同一个文件里,你是不可见的,打包镜像时候也顺带一起打包了,如果你通过 -v 挂载出来,那么你挂载出来的数据就独立到宿主主机,你可以直接在宿主主机访问到该文件,当然打包时候是不会把你这些独立出来的文件一起打包的。

rootfs 只是一个操作系统所包含的文件、配置和目录,并不包括操作系统内核。在 Linux 操作系统中,这两部分是分开存放的,操作系统只有在开机启动时才会加载指定版本的内核镜像。而我们装的各种运行环境其实是Linux内核的一种扩展,这种扩展也是开机启动时候加载然后创建一个属于自己的rootfs。

这么说就意味着每种语言环境的每个版本都有属于自己的rootfs,比如.net 和java他们的环境不一致,那么rootfs也不一致,这时你可能已经发现了另一个非常棘手的问题:难道我每开发一个应用,或者改造一下现有的应用,都要重复制作一次 rootfs (就是配置环境变量)吗?

我个人觉得rootfs和git原理大同小异!

用户制作镜像的每一步操作,都会生成一个层,也就是一个增量,也就是说你基于一个镜像创建的容器进行的所有操作都只是在这个增量层去处理,删除其实是遮罩上一层的内容,修改是先遮罩在创建新的。

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