【Docker学习总结】3.Docker 容器相关技术简介

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u013517797/article/details/83444348

上一篇总结学习了Docker的基本组成,大致了解了Docker是由Docker Client客户端、Docker Daemon守护进程、Docker Image镜像、Docker Container容器以及Docker Registry仓库组成。本篇将继续了解Docker针对容器的相关底层技术,即是ocker容器所依赖的Linux内核技术----Namespace和CGroup技术。

在第一篇中了解了,Docker依赖Linux内核的特性,Namespace命名空间以及Control groups(CGroup)控制组,通过学习这两种特性,能够更好的帮助我们理解Docker容器的资源分配和管理。

一、Namespace命名空间

很多编程语言都包含了“命名空间”的概念,我们可以认为“命名空间”是一种“封装”的概念, 而“封装”本身实际上实现的是代码的隔离。
而在操作系统中,命名空间提供的是系统资源的隔离,而系统资源包括了进程、网络、文件系统等:

而实际上,Linux实现命名空间的主要目的之一,就是为了实现轻量级虚拟化服务,也就是我们说的容器。在同一个命名空间下的进程,可以感知彼此的变化,而对其它命名空间中的进程一无所知。这让就可以让容器中的进程产生一种错觉,仿佛它自己置身于一个独立的系统环境中,以此达到“独立”和“隔离”的目的。

我们从Docker公开的文档来看,它使用了5种命名空间:
(1)PID(Process ID) 进程隔离
(2)NET(NetWork) 管理网络接口
(3)IPC(InterProcess Communication) 管理跨进程通信的访问
(4)MNT(Mount) 管理挂载点
(5)UTS(Unix Timesharing System) 隔离内核和版本标识

那么,这些隔离的资源,是如何被管理起来的呢?这就需要用到------Control groups(CGroup)控制组了。

二、Control groups(CGroup)控制组

Control groups是Linux内核提供的,一种可以限制、记录、隔离进程组所使用的物理资源的机制。
最初是由google工程师提出,并且在2007年时被Linux kernel的内核中的2.6.24版本引进。可以说,Control groups就是为容器而生的,没有Control groups就没有容器技术的今天。

Control groups提供了以下功能:
(1)资源限制
例如,memory(内存)子系统可以为进程组设定一个内存使用的上限,一旦进程组使用的内存达到了限额,该进程组再发出内存申请时,就会发出“out of memory”(内存溢出)的警告。

(2)优先级设定
它可以设定哪些进程组可以使用更大的CPU或者磁盘IO的资源。

(3)资源计量
它可以计算进程组使用了多少系统资源。尤其是在计费系统中,这一点十分重要。

(4)资源控制
它可以将进程组挂起或恢复。

三、Namespace和CGroup带给Docker的能力

到这里我们了解了Namespace和CGroup的概念和职能,而这两个特性带给了Docker哪些能力呢?如下:
(1)文件系统隔离
首先是文件系统的隔离,每个Docker的容器,都可以拥有自己的root文件系统。

(2)进程隔离
每个容器都运行在自己的进程环境中。

(3)网络隔离
容器间的虚拟网络接口和IP地址都是分开的。

(4)资源的隔离和分组
使用cgroups将cpu和内存之类的资源独立分配给每个Docker容器。

到这里,我们对Docker容器的能力已经有了一个大致的了解,通过前面的几篇总结,我们也了解了Docker是什么,以及Docker由哪些部分组成。后面的总结将为大家详细介绍Docker是怎样安装、部署和使用的。


参考资料:
《极客学院Docker学习》教学视频

转载请注明出处:https://blog.csdn.net/acmman/article/details/83444348

猜你喜欢

转载自blog.csdn.net/u013517797/article/details/83444348