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,为进程设定内存使用的限制
原文地址:https://www.cnblogs.com/virgosnail/p/13260503.html