前言

Docker的三大核心为:镜像、容器、仓库。但是这次我想记录的不是这个。我想记录一下的是在背后支撑docker这项技术的原理。

一、命名空间 (namespaces),实现进程间隔离

Linux 的命名空间机制提供了以下七种不同的命名空间,包括 CLONE_NEWCGROUP、CLONE_NEWIPC、CLONE_NEWNET、CLONE_NEWNS、CLONE_NEWPID、CLONE_NEWUSER 和 CLONE_NEWUTS,通过这七个选项我们能在创建新的进程时设置新进程应该在哪些资源上与宿主机器进行隔离。

  1. IPC
    用 CLONE_NEWIPC 来隔离System V IPC和POSIX message queues。每一个IPC Namespace都有自己的System V IPC和POSIX message queue。



  2. Mount
    用 CLONE_NEWNS 来隔离各个进程看到的挂载点视图。在不同Namespace的进程中,看到的文件系统层次是不一样的。在Mount Namespace中调用 mount()和 umount()仅仅只影响当前Namespace的文件系统,而对全局的文件系统是没有影响的。

  3. UTS
    UTS 主要用 CLONE_NEWUTS 来隔离nodename和domainname两个系统标识。在UTSNamespace里, 每个Namespace都允许有自己的hostname,docker就是靠它来保障容器的hostname与宿主机不一样的。



(一共是七方面,上面仅仅讨论了其中几种我不太理解的)

二、Cgroup,实现物理资源的限制

Linux 的命名空间 (namespaces) 为新创建的进程隔离了文件系统、网络并与宿主机器之间的进程相互隔离,但是命名空间并不能够为我们提供物理资源上的隔离,比如 CPU 或者内存。
Cgroup提供了对一组进程及将来子进程的资源限制、控制和统计的能力,这些资源包括CPU、内存、存储、网络等
Cgroup主要包含三大组件:
1. hierarchy
hierarchy 把一组cgroup串成一个树状结构,一个这样的树便是一个hierarchy,通过这种树状结构,Cgroups可以做到继承。
2. 子系统
cpu – 使用调度程序提供对 CPU 的 cgroup 任务访问。
cpuacct – 自动生成 cgroup 中任务所使用的 CPU 报告。
cpuset – 为 cgroup 中的任务分配独立 CPU(在多核系统)和内存节点。
devices – 可允许或者拒绝 cgroup 中的任务访问设备。
memory – 设定 cgroup 中任务使用的内存限制,并自动生成由那些任务使用的内存资源报告。
blkio – 为块设备设定输入/输出限制,比如物理设备(磁盘,固态硬盘,USB 等等)。
net_cls – 使用等级识别符(classid)标记网络数据包,可允许 Linux 流量控制程序(tc)识别从具体 cgroup 中生成的数据包。
ns – 名称空间子系统。
freezer – 挂起或者恢复 cgroup 中的任务。
它们能够为对应的控制组分配资源并限制资源的使用。
3. 进程组
每一个 CGroup 下面都有一个 tasks 文件,其中存储着属于当前控制组的所有进程的 pid,作为负责 cpu 的子系统,cpu.cfs_quota_us 文件中的内容能够对 CPU 的使用作出限制,如果当前文件的内容为 50000,那么当前控制组中的全部进程的 CPU 占用率不能超过 50%。

三、UnionFS,镜像文件的构建和存储

  1. UnionFS 其实是一种为 Linux 操作系统设计的用于把多个文件系统『联合』到同一个挂载点的文件系统服务。而 AUFS 即 Advanced UnionFS 其实就是 UnionFS 的升级版,它能够提供更优秀的性能和效率。



  2. 每一个镜像层都是建立在另一个镜像层之上的,同时所有的镜像层都是只读的,只有每个容器最顶层的容器层才可以被用户直接读写,所有的容器都建立在一些底层服务(Kernel)上,包括命名空间、控制组、rootfs 等等,这种容器的组装方式提供了非常大的灵活性,只读的镜像层通过共享也能够减少磁盘的占用

  3. 除了 AUFS 之外,Docker 还支持了不同的存储驱动,包括 aufs、devicemapper、overlay2、zfs 和 vfs 等等,在最新的 Docker 中,overlay2 取代了 aufs 成为了推荐的存储驱动,但是在没有 overlay2 驱动的机器上仍然会使用 aufs 作为 Docker 的默认驱动。



参考文章
《Docker核心原理》
《Docker 核心技术与实现原理》



http://xzh.i3geek.com

爱唠叨的老鱼

爱唠叨的老鱼

技术经理,个人站长,创业者

0 条评论

发表评论

电子邮件地址不会被公开。 必填项已用*标注

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据