1. Docker 原理
Docker引擎的基础是Linux容器(Linux Containers, LXC)技术。从操作系统功能上看,Docker底层依赖的核心技术主要包括以下几部分:
命名空间(Namespaces) 每个容器都可以拥有自己单独的命名空间,运行在其中的应用都像是在独立的操作系统中运行一样。命名空间保证了容器之间彼此互不影响。在操作系统中,所有资源都是进程共享的。要实现虚拟化,除了要实现对内存、CPU、网络IO、硬盘IO、存储空间等的限制外,还要实现文件系统、网络、PID、IPC等的相互隔离。随着Linux系统对于命名空间功能的逐步完善,已经实现了这些需求,让进程在彼此隔离的命名空间中运行。
控制组(Control Groups) 控制组(CGroups)是Linux内核的一个特性,主要用来对共享资源进行隔离、限制、审计等,可以提供对容器的内存、CPU、磁盘IO等资源进行限制。对Docker来说控制组最重要的功能是根据组的命名空间执行组之间进程、网络连接、文件系统等资源的隔离。
联合文件系统(Union File Systems) 联合文件系统(UnionFS)是一种轻量级的高性能分层文件系统,它支持将文件系统中的修改信息作为一次提交,并层层叠加。联合文件系统是实现Docker镜像的技术基础。
虚拟网络支持 Docker的网络实现是利用了Linux上的网络命名空间和虚拟网络设备。