Docker 容器相关技术
Posted wq3435
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Docker 容器相关技术相关的知识,希望对你有一定的参考价值。
Docker 依赖的Linux内核特性
- Namespaces 命名空间
- Control groups (cgroups) 控制组
理解这两个特性,能够更好的帮助我们理解docker的资源分配和管理
Namespaces 命名空间
很多编程语言都包含有命名空间的概念,可以认为命名空间是一种封装的概念,编程中的封装目的是实现代码的隔离。
编程语言:
封装 -----> 代码隔离
操作系统:
系统资源的隔离
系统资源包括 进行、网络、文件系统...
实际上Linux系统内核实现命名空间的目的之一就是为了实现轻量级虚拟化服务,也就是我们说的容器。
在同一个命名空间下的进程可以感知彼此的变化,二对其他命名空间下的进程一无所知,这样可以让容器中的进程产生一种错觉,仿佛置身于一个独立的系统环境中,以此达到独立和隔离的目的。
从docker的公开文档中可以看到使用了 5 种不同的命名空间
- PID (Process ID) 进程隔离
- NET (Network) 管理网络接口
- IPC (InterProcess Communication) 管理跨进程通信的访问
- MNT (Mount) 管理挂载点也就是文件系统
- UTS (Unix Timesharing System) 隔离内核和版本标识
这些隔离的资源是如何管理起来的呢,这就需要用到 Control groups
Control groups 控制组
Control groups 是Linux系统内核提供的一种可以限制,记录和隔离进程组所使用的物理资源的机制,最初由Googler工程师提出,
并且在2007年被Linux内核的2.6.24版本整合进来,可以说cgroups就是为了实现容器而生的,没有cgroups就没有容器的技术的今天。
Control groups控制组提供了哪些功能:
- 资源限制 比如Memory子系统可以为进程组设定一个内存使用的上限,一旦进程组使用的内存达到的上限,在申请内存就会发出Out of Memory的消息
- 优先级设定 可以设定哪些进程组使用更大的CPU或者是磁盘IO 的资源
- 资源计量 可以计算进程组使用了多少系统资源,尤其在计费系统中这点非常重要
- 资源控制 可以将进程组挂起和恢复
这两个特性带给了Docker容器的哪些能力呢?
Docker容器的能力
- 文件系统隔离:每个容器都有自己的root文件系统
- 进程隔离: 每个容器都运行在自己的进程环境中
- 网络隔离:容器间的虚拟网络接口和IP地址都是分开的
- 资源隔离和分组:使用cgroups将CPU 和内存之类的资源独立分配给每个Docker容器
以上是关于Docker 容器相关技术的主要内容,如果未能解决你的问题,请参考以下文章