基础技术
Docker是用Go编写的,它利用Linux内核的几个功能来提供其功能。
命名空间
Docker使用一种被称为namespaces提供隔离工作空间的技术来称为容器。运行容器时,Docker会为该容器创建一组 名称空间。
这些命名空间提供了一层隔离。容器的每个方面都在一个单独的命名空间中运行,其访问权限仅限于该命名空间。
Docker Engine在Linux上使用以下命名空间:
pid命名空间:进程隔离(PID:进程ID)。
net命名空间:管理网络接口(NET:网络)。
ipc命名空间:管理访问IPC资源(IPC:进程间通信)。
mnt命名空间:管理文件系统挂载点(MNT:摩)。
uts命名空间:隔离内核和版本标识符。(悉尼科技大学:Unix分时系统)。
对照组
Linux上的Docker Engine还依赖于另一种称为控制组 (cgroups)的技术。cgroup将应用程序限制为特定的资源集。控制组允许Docker Engine将可用的硬件资源共享给容器,并可选择强制执行限制和约束。例如,您可以限制特定容器的可用内存。
联盟文件系统
联合文件系统或UnionFS是通过创建层来操作的文件系统,使它们非常轻量和快速。Docker Engine使用UnionFS为容器提供构建块。Docker Engine可以使用多种UnionFS变体,包括AUFS,btrfs,vfs和DeviceMapper。
容器格式
Docker Engine将命名空间,控制组和UnionFS组合成一个称为容器格式的包装器。默认容器格式是libcontainer。将来,Docker可以通过与BSD Jails或Solaris Zones等技术集成来支持其他容器格式。
网友评论