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技术入门与实战》