Skip to content

Docker Engine 架构

Docker Engine 采用客户端-服务器架构,由多个组件协同工作。

架构组件

Docker CLI

Docker CLI 是用户与 Docker 交互的命令行工具,通过 REST API 与 Docker Daemon 通信。

Docker Daemon (dockerd)

Docker Daemon 是长期运行的后台进程,负责:

  • 管理容器生命周期
  • 管理镜像和层
  • 管理网络和存储
  • 处理 API 请求

containerd

containerd 是一个高级容器运行时,提供:

  • 镜像管理(拉取、推送、存储)
  • 容器生命周期管理
  • 快照和存储管理
  • 网络命名空间管理

runc

runc 是 OCI (Open Container Initiative) 标准的参考实现,负责:

  • 创建和运行容器
  • 管理 Linux 命名空间 (Namespaces)
  • 管理控制组 (Cgroups)
  • 管理文件系统

工作流程

容器启动流程

1. docker run 命令

2. Docker CLI 发送请求到 Daemon

3. Daemon 解析请求

4. containerd 准备容器运行时

5. runc 创建容器

6. 容器运行

镜像拉取流程

1. docker pull 命令

2. Daemon 检查本地镜像

3. 如果不存在,从 Registry 拉取

4. containerd 管理镜像层

5. 镜像存储到本地

命名空间 (Namespaces)

Docker 使用 Linux 命名空间实现容器隔离:

  • PID 命名空间 - 进程隔离
  • 网络命名空间 - 网络隔离
  • 挂载命名空间 - 文件系统隔离
  • UTS 命名空间 - 主机名隔离
  • IPC 命名空间 - 进程间通信隔离
  • 用户命名空间 - 用户 ID 隔离

控制组 (Cgroups)

Cgroups 用于限制和监控资源使用:

  • CPU 限制
  • 内存限制
  • I/O 限制
  • 设备访问控制

存储驱动

存储驱动负责管理镜像和容器的文件系统层。常见驱动:

  • overlay2 - 推荐,性能好
  • devicemapper - 旧版本使用
  • btrfs - 需要 Btrfs 文件系统
  • zfs - 需要 ZFS 文件系统

由 BSFC Tech 提供技术支持