跳到主要内容

Docker的底层技术

Docker 的底层技术主要包括以下几个核心组件:

  1. Linux Containers (LXC): Docker 最初是基于 LXC 构建的,LXC 是一种操作系统级别的虚拟化技术,允许在一个单一的控制主机上运行多个隔离的容器。每个容器都运行在自己的进程中,并且可以看作是一个轻量级的虚拟机。
  2. Control Groups (cgroups): cgroups 是 Linux 内核的一个特性,它可以限制、记录和隔离进程组使用的物理资源(如 CPU、内存、磁盘 I/O 等)。Docker 使用 cgroups 来确保容器只能使用分配给它们的资源。
  3. Union File Systems (UnionFS): Docker 使用 UnionFS 来创建容器的文件系统。UnionFS 允许将多个目录挂载到同一个虚拟文件系统下,这些目录可以被视为一个单独的合并后的文件系统。Docker 最常用的 UnionFS 是 AUFS(Another Union File System),但也支持其他类型的 UnionFS,如 OverlayFS。
  4. Namespaces: Linux namespaces 为容器提供了隔离的环境。它们确保了容器在运行时可以看到自己的进程、网络接口、挂载点等,而不会看到主机或其他容器的这些信息。Docker 使用了以下几种 namespaces:
    • PID Namespace: 隔离进程 ID
    • NET Namespace: 隔离网络接口
    • IPC Namespace: 隔离进程间通信
    • MNT Namespace: 隔离文件系统挂载点
    • UTS Namespace: 隔离主机名和域名
  5. Container Image: Docker 使用容器镜像来创建容器。容器镜像是多层文件系统的集合,每一层代表了对文件系统的一次修改。这些层是只读的,并且在运行容器时,Docker 会在这些层的顶部添加一个可写层。
  6. Docker Daemon: Docker 守护进程(dockerd)是 Docker 的核心组件,它监听 Docker API 请求并管理 Docker 对象,如镜像、容器、网络和卷。
  7. Docker Client: Docker 客户端是用户与 Docker 交互的主要方式。它发送命令到 Docker 守护进程,比如构建、运行和停止容器等。 这些技术的组合使得 Docker 能够提供一个轻量级、可移植且高效的容器化平台。随着 Docker 的发展,它也引入了更多的功能和组件,如 Docker Swarm 用于容器编排,以及后来的 Docker Engine 与容器运行时 Containerd 的集成。