2 Docker 的技术原理介绍

Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口。

简单的说就是,在 Linux 系统上迅速创建一个容器(类似虚拟机)并在容器上部署和运行应用程序,并通过配置文件可以轻松实现应用程序的自动化安装、部署和升级,非常方便。因为使用了容器,所以可以很方便的把生产环境和开发环境分开,互不影响,这是 docker 最普遍的一个玩法。

2 Docker 的技术原理介绍_第1张图片

什么是容器?

  • 一种虚拟化的方案
  • 操作系统级别的虚拟化
  • 只能运行相同或相似内核的操作系统
  • 依赖于 Linux 内核特性: NamespaceCgroups(Control Group)

1 Docker 相关的核心技术之 namespace

Namespace :命名空间
编程语言:封装——》代码隔离
操作系统:系统资源的隔离;进程、网络、文件系统…
五种命名空间:

  • PID(Process ID) :进程隔离
  • NET(Network) :管理网络接口
  • IPC(InterProcess Communication) :管理跨进程通信的访问
  • MNT(Mount) :管理挂载点
  • UTS(Unix Timesharing System) :隔离内核和版本标识

2 Docker 相关的核心技术之 cgroups

Linux 系统中经常有个需求就是希望能限制某个或者某些进程的分配资源(资源限制、优先级设定、资源计量、资源控制)。于是就出现了 cgroups 的概念, cgroup 就是 controller group ,在这个 group 中,有分配好的特定比例的 cpu时间,IO时间,可用内存大小等。 cgroups 是将任意进程进行分组化管理的 Linux 内核功能。最初由 google 的工程师提出,后来被整合进 Linux 内核中。

cgroups 中的重要概念是“子系统”,也就是资源控制器,每种子系统就是一个资源的分配器,比如c pu子系统是控制 cpu 时间分配的。首先挂载子系统,然后才有 control group 的。比如先挂载 memory 子系统,然后在 memory 子系统中创建一个 cgroup 节点,在这个节点中,将需要控制的进程id写入,并且将控制的属性写入, 这就完成了内存的资源限制。

cgroups 被 Linux 内核支持,有得天独厚的性能优势,发展势头迅猛。在很多领域可以取代虚拟化技术分割资源。 cgroup默认有诸多资源组,可以限制几乎所有服务器上的资源:cpu mem iops,iobandwide,net,device acess等

3 Docker 相关的核心技术之 LXC

LXC 是 Linux containers 的简称,是一种基于容器的操作系统层级的虚拟化技术。借助于 namespace 的隔离机制 和 cgroup限额功能,LXC 提供了一套统一的API和工具来建立和管理container。LXC跟其他操作系统层次的虚 拟化技术相比,最大的优势在于LXC被整合进内核,不用单独为内核打补丁 。

LXC 旨在提供一个共享kernel的 OS 级虚拟化方法,在执行时不用重复加载Kernel, 且container的kernel与host 共享,因此可以大大加快container的 启动过程,并显著减少内存消耗,容器在提供隔离的同时,还通过共享这 些资源节省开销,这意味着容器比真正的虚拟化的开销要小得多。 在实际测试中,基于LXC的虚拟化方法的IO和 CPU性能几乎接近 baremetal 的性能。

虽然容器所使用的这种类型的隔离总的来说非常强大,然而是不是像运行在hypervisor上的虚拟机那么强壮仍具有 争议性。如果内核停止,那么所有的容器就会停止运行。

• 性能方面:LXC>>KVM>>XEN
• 内存利用率:LXC>>KVM>>XEN
• 隔离程度: XEN>>KVM>>LXC

4 Docker 相关的核心技术之 AUFS

什么是AUFS? AuFS是一个能透明覆盖一或多个现有文件系统的层状文件系统。 支持将不同目录挂载到同一 个虚拟文件系统下,可以把不同的目录联合在一起,组成一个单一的目录。这种是一种虚拟的文件系统,文 件系统不用格式化,直接挂载即可。

Docker一直在用AuFS作为容器的文件系统。当一个进程需要修改一个文件时,AuFS创建该文件的一个副本。 AuFS可以把多层合并成文件系统的单层表示。这个过程称为写入复制( copy on write )。

AuFS允许Docker把某些镜像作为容器的基础。例如,你可能有一个可以作为很多不同容器的基础的CentOS 系统镜像。多亏AuFS,只要一个CentOS镜像的副本就够了,这样既节省了存储和内存,也保证更快速的容 器部署。

使用AuFS的另一个好处是Docker的版本容器镜像能力。每个新版本都是一个与之前版本的简单差异改动, 有效地保持镜像文件最小化。但,这也意味着你总是要有一个记录该容器从一个版本到另一个版本改动的 审计跟踪。

5 Docker 原理之 App 打包

LXC的基础上, Docker额外提供的Feature包括:标准统一的 打包部署运行方案

为了最大化重用Image,加快运行速度,减少内存和磁盘 footprint, Docker container运行时所构造的运行环境,实际 上是由具有依赖关系的多个Layer组成的。例如一个apache 的运行环境可能是在基础的rootfs image的基础上,叠加了 包含例如Emacs等各种工具的image,再叠加包含apache及 其相关依赖library的image,这些image由AUFS文件系统加载 合并到统一路径中,以只读的方式存在,最后再叠加加载 一层可写的空白的Layer用作记录对当前运行环境所作的修 改。

有了层级化的Image做基础,理想中,不同的APP就可以既 可能的共用底层文件系统,相关依赖工具等,同一个APP的 不同实例也可以实现共用绝大多数数据,进而以copy on write的形式维护自己的那一份修改过的数据等。

2 Docker 的技术原理介绍_第2张图片

6 Docker全生命周期开发模式

Docker正在迅速改变云计 算领域的运作规则,并彻 底颠覆云技术的发展前景。 从持续集成/持续交付到微 服务、开源协作乃至 DevOps,Docker一路走来 已经给应用程序开发生命 周期以及云工程技术实践 带来了巨大变革。

2 Docker 的技术原理介绍_第3张图片

你可能感兴趣的:(#,2,Docker)