docker 简介
容器是一种沙盒技术。将应用部署到沙盒中,应用之间有了边界,不至于彼此之间相互干扰。
容器技术的核心功能,就是通过约束和修改进程的动态表现,从而为其创造出一个“边界”。
对于 Docker 等大多数 Linux 容器来说,Cgroups 技术是用来制造约束的主要手段,而 Namespace 技术则是用来修改进程视图的主要方法。
Namespace 的作用是“隔离”,它让应用进程只能看到该 Namespace 内的“世界”;而 Cgroups 的作用是“限制”,它给这个“世界”围上了一圈看不见的墙。这么一折腾,进程就真的被“装”在了一个与世隔绝的房间里
NameSpace
Namespace 技术实际上修改了应用进程看待整个计算机“视图”,即它的“视线”被操作系统做了限制,只能“看到”某些指定的内容
Docker运行时,本质上还是宿主机上的一个进程。不过在创建进程时,通过 NameSpace 机制将这个进程进行了隔离,它只能看见我们想让它看见的视图。
比如PID,Docker里面的进程PID就是1,但是在宿主机上,它的进程pid并没有改变,通过NameSpace 机制还可以实现Mount,UTS,IPC,NetWork,User 等信息的隔离效果。
让进程看见指定的进程,挂载点,网络,用户等信息。
镜像只是提供了一套镜像文件系统中的各种文件,而各种内核相关的模块或者特性支持,完全依赖于宿主机。
所以,Docker 容器这个听起来玄而又玄的概念,实际上是在创建容器进程时,指定了这个进程所需要启用的一组 Namespace 参数。这样,容器就只能“看”到当前 Namespace 所限定的资源、文件、设备、状态,或者配置。而对于宿主机以及其他不相关的程序,它就完全看不到了。
容器只是一种特殊的进程。
Cgroups
Linux Cgroups 的全称是 Linux Control Group。它最主要的作用,就是限制一个进程组能够使用的资源上限,包括 CPU、内存、磁盘、网络带宽等等。
它就是一个子系统目录加上一组资源限制文件的组合,实现对进程资源的限制。
blkio,为块设备设定I/O 限制,一般用于磁盘等设备;
cpuset,为进程分配单独的 CPU 核和对应的内存节点;
memory,为进程设定内存使用的限制
如果文章对您有所帮助,可以点一下推荐