Docker原理初探

一、Docker简介

1. 什么是容器

A container is a standard unit of software that packages up code and all its dependencies so the application runs quickly and reliably from one computing environment to another.

image.png
  1. 容器是一个软件的标准单元
  2. 包含应用代码及其依赖
  3. 可以方便可靠的从一个环境迁移到另外一个环境
  4. Docker容器是运行在Docker引擎之上的

2. Docker容器 VS 虚拟机

Containers and virtual machines have similar resource isolation and allocation benefits, but function differently because containers virtualize the operating system instead of hardware. Containers are more portable and efficient.

image.png
  1. 虚拟机和Docker容器都有类似资源隔离和分配功能
  2. Docker容器虚拟化了操作系统
  3. 虚拟机虚拟化了硬件

二、Docker的本质———一个有“边界”的进程

1. 容器是一个进程

1)虚拟机进程模型

image.png

在虚拟机中,宿主机与虚拟机与进程的关系如下图所示,宿主机能看到虚拟机进程,但是看不到虚拟机中的进程。在使用容器时,大部分人也是这么理解容器的,包括很多Docker资料也是引导我们这么理解的。可以实践一下是否真的如此。

2)Docker进程模型

实践

  1. 先启动一个容器,并在容器执行ps -ef
image.png
  1. 在宿主机执行ps -ef
image.png

可以看到,容器的启动进程/bin/sh不仅可以被宿主机看到,而且是宿主机上的一个普通进程,唯一一点有困惑的地方就是在容器中看到/bin/sh的进程号是1,而在宿主机上看到的/bin/sh的进程号是15790,这种现象其实就是PID Namespace在起作用,Docker为这个进程套上一层PID Namespace,使得这个进程及其子进程看不到Namespace之外的其他进程

Namespace

Linux中一共有六个Namespace,除了PID Namespace之外,还有Mount、UTS、IPC、Network、User这些Namespace,不难想到,/bin/sh的子进程ifconfig看到的网络栈与宿主机不符是Network Namespace在起作用,/bin/sh的子进程ls看到的目录和宿主机不符是Mount Namespace在起作用

image.png

Docker实际进程模型

image.png

Docker容器只是一个抽象概念,Docker容器内的进程本质就是宿主机上被套上了Namespace的进程

2. Docker优劣势

有了上面的讲解,可以看到Docker是比虚拟机少一层封装的,所以"敏捷"和“高性能”是容器的最大优势。但是Namespace技术相比于虚拟化技术也有很多劣势,其中最大的问题就是隔离的不彻底

  • 容器内进程只是宿主机上的一种特殊进程,所以不同的容器内的进程是共享宿主机内核的,所以低版本的宿主机内核运行不了高版本的Linux系统的容器
  • 在Linux内核中,很多资源和对象是不能被Namespace化的,比如时间,所以使用虚拟机时我们可以随意折腾,但是在使用容器我们的知道什么能做什么不能做

三、如何限制Docker容器资源

容器内进程其实就是宿主机上的一个特殊进程,那么这些进程跑在同一个虚拟机上,势必会相互竞争资源,这虽然是容器相比虚拟机的一个劣势,但是却可以用Cgroups技术来解决。
Linux Cgroups 的全称是 Linux Control Group。它最主要的作用,就是限制一个进程组能够使用的资源上限,包括 CPU、内存、磁盘、网络带宽等等。

1. Cgroups实践

我们可以先看看Linux上都有哪些Cgroup

image.png

Linux中一切皆文件,我们可以在/sys/fs/cgroup下看到这些Cgroups

image.png

那么Cgroups到底如何使用,我们可以进行一下简单的实践

  1. 我们启动一个死循环进程,并用top命令查看这个死循环进程,发现其CPU使用率是100%,接下来我们使用Cgroup技术限制它的CPU使用率
image.png
  1. 在/sys/fs/cgroup/cpu创建container目录,并进入到其中查看到文件夹下自带这么多文件
image.png
  1. 我们修改cpu.cfs_quota_us文件,将其中的-1改成20000(us),表示在100000us的时间里,我们有20000us可以使用cpu
image.png
  1. 但是以上只是填写了限制参数,那么到底对哪个进程进行限制呢?因此我们还需要将被限制的进程号写入tasks文件,执行echo 17242 > tasks

  2. 以上我们一共修改了两个文件分别是cpu.cfs_quota_ustasks

image.png
  1. 进行了以上修改之后,我们就可以看到这个死循环的进程使用率降为20000/100000
image.png

2. Docker容器实践

  1. docker run -it --cpu-period=100000 --cpu-quota=20000 ubuntu /bin/bash执行一个容器,并进行容器资源限制

  2. 查看容器资源限制在Cgroup资源上的映射

image.png

3. 加上Cgroups后的Docker进程模型

image.png

四、总结

Docker的本质就是Linux容器技术,为容器内的进程套上Namespace,使其看不见宿主机上的真实情况,并为其配置Cgroups参数,使其只能使用有限的资源。

五、参考

深入剖析Kubernetes

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

推荐阅读更多精彩内容