Docker依赖的Linux内核特性

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

Docker依赖的Linux内核特性

Namespaces 命名空间

  命名空间是 Linux 内核的一个强大特性,为容器虚拟化的实现带来了极大的便利。利用这一特性,每个容器都可以拥有自己单独的命名空间,运行在其中的应用都像是在独立的操作系统环境中一样。命名空间机制保证了容器之间彼此互不影响。

  • PID (process ID) 进程ID隔离
  • NET(network) 管理网络端口
  • IPC(InterProcess Communication)
  • 管理跨进程通信的访问
  • MNT(Mount) 管理挂载点
  • UTS(Unix Timesharing System) 隔离内核和版本标识
  • Control groups(c groups) 控制组

Control groups(c groups) 控制组

  控制组是 Linux 内核的一个特性,主要用来对共享资源进行隔离、限制、审计等,只有能控制分配到容器的资源,才能避免多个容器同时运行时对宿主机系统的资源竞争。

  • 资源限制
  • 优先级设定
  • 资源计量
  • 资源控制
  • 用来分配资源
  • 来源于Google
  • Linux kernel 2.6.24 @ 2007

Docker容器的能力

  • 文件系统隔离:每个容器都有自己的root文件系统。
  • 进程隔离:每个容器都运行在自己的进程环境中。
  • 网络隔离:容器间的虚拟网络接口和IP地址都是分开的。
  • 资源隔离和分组:使用cgroup将CPU和内存之类的资源独立分配给每个Docker容器。

参考资料:
《Docker技术入门与实战》