核心技术
Docker 核心技术有:
- CGroups:控制组
- Namespace:命名空间
- UnionFS:联合文件系统
这些技术为 Docker 提供了容器隔离、资源管理和镜像层次结构等重要功能。
它们共同构成了 Docker 容器的核心组件,使得 Docker 能够在不同的容器中实现隔离、资源管理、镜像构建和版本控制等功能。 通过利用 CGroups、Namespace 和 UnionFS,Docker 成为了一种高效、轻量、灵活的容器化平台。
CGroups
CGroups 是 Linux 内核的一个特性,用于限制和控制进程组(Process Group)对系统资源的使用。
Docker 利用 CGroups 来实现容器的资源管理和限制,例如 CPU、内存、磁盘 I/O、网络带宽等。 通过 CGroups,Docker 可以在宿主机上设置资源限制,确保容器之间以及容器与宿主机之间的资源分配和使用是可控的。
CGroups 使用层级结构组织资源控制,可以根据需要创建多个 CGroups,并将进程(容器)添加到相应的 CGroups 中。 这样,可以为每个容器分配特定的资源限制,实现资源的隔离和保护。
Namespace
Namespace 是 Linux 内核的另一个重要特性,用于隔离进程的不同方面,使它们在不同的命名空间中运行,互相之间不受影响。 Docker 使用 Namespace 来实现容器的隔离,确保容器中的进程无法感知和干扰宿主机和其他容器的运行。
Docker 使用以下几种命名空间来隔离容器的不同方面:
- PID Namespace:隔离进程 ID,使容器内的进程与宿主机以及其他容器的进程 ID 不冲突。
- Network Namespace:隔离网络栈,使容器有自己独立的网络接口和 IP 地址。
- Mount Namespace:隔离文件系统挂载点,使容器拥有自己的文件系统视图,不受宿主机的影响。
- UTS Namespace:隔离主机名和域名,使容器有自己的主机名和域名。
- IPC Namespace:隔离进程间通信资源,使容器之间无法直接通信。
这些命名空间共同实现了容器与宿主机及其他容器的隔离,确保容器之间的运行环境是相互独立的。
UnionFS
UnionFS 是一种文件系统技术,允许将多个文件系统目录联合挂载到一个统一的目录中。 Docker 使用 UnionFS 来构建镜像的分层结构,这是 Docker 镜像轻量、高效的基础。
Docker 镜像由多个只读层(Layer)组成,每个层都包含了文件和文件系统的变更。 当创建新的镜像时,Docker 会在现有的基础镜像上添加新的层,而不是复制整个文件系统。 这使得镜像的构建和存储变得高效,节省了磁盘空间。
UnionFS 提供了几种实现,包括 AUFS、OverlayFS、DeviceMapper 等,不同的 Docker 主机可能采用不同的实现。 无论使用哪种实现,UnionFS 都为 Docker 镜像的分层和版本管理提供了强大的基础。