"本次演讲是Gopher China 2015大会上关于Docker技术的一次分享,由张成远主讲,涵盖了Docker的核心技术原理和实际应用。内容包括容器系统整体架构、Namespace、CGroup、DeviceMapper以及Docker镜像存储等方面。"
在讲解Docker原理时,首先介绍了容器系统整体架构,它是一种轻量级的虚拟化技术,通过进程级别的资源隔离来实现。容器并不像虚拟机那样模拟整个操作系统,而是共享宿主机的操作系统内核,从而达到更高的运行效率。
Namespace是实现容器隔离的关键技术,它为进程提供独立的命名空间视图。目前支持的命名空间有六种:mnt(挂载点)、pid(进程)、net(网络栈)、ipc(System V IPC)、uts(主机名)和user(用户ID)。通过创建新的命名空间,每个容器都能拥有独立的文件系统、进程列表、网络配置等。
CGroup(Control Groups)是Linux内核提供的一个机制,用于限制、记录和隔离进程组使用的物理资源(如内存、CPU、磁盘I/O等)。CGroup不依赖于Namespace,可以独立使用,通过VFS接口暴露管理功能,使得资源管理更加灵活。例如,CGroups中的IO子系统可以限制块设备I/O、CPU使用、内存限制等。
DeviceMapper是Docker存储驱动的一部分,它提供了设备映射和IO策略的支持。在Docker中,DeviceMapper常用于实现存储层,特别是thin provisioning(精简配置),允许创建多个虚拟设备共享底层存储空间。这为Docker容器提供了高效的数据存储解决方案。
Docker支持多种存储驱动器,如Aufs、Btrfs和DeviceMapper。其中,DeviceMapper由于基于设备层,对于上层的文件系统layerDiff不直接支持,因此Docker需要自己处理文件的差异比较。如果没有指定存储驱动,Docker会根据操作系统的可用性依次尝试aufs、btrfs和devicemapper。
这次演讲深入探讨了Docker如何利用Namespace实现进程隔离,CGroup进行资源管理,以及DeviceMapper在存储层面的作用。这些核心技术使得Docker能够在保持轻量级的同时,提供强大的容器化应用程序部署和管理能力。