15.1.3 Docker核心组件与架构层次

Docker核心组件与架构层次#

Docker 采用客户端—服务端模式,围绕镜像、容器、网络与存储组成运行生态。核心组件包括 Docker Client、Docker Daemon、containerd、runc 与 Registry;架构层次包含 API 层、管理层、运行时层、内核层与基础设施层。

原理草图(组件与分层)

文章图片

核心职责说明
- Docker Client:发起 build/run/stop 等请求。
- Docker Daemon:编排与协调镜像、容器、网络、卷。
- containerd:镜像管理与容器生命周期高层控制。
- runc:直接调用内核能力创建容器进程。
- Registry:镜像分发与版本管理。


示例:查看核心组件与层次信息#

# 查看客户端/服务端版本与组件
docker version

# 查看系统信息与运行时层级
docker info | sed -n '1,80p'

# 预期看到 Server: Docker Engine, containerd, runc 等字段

关键字段解释
- Server Version:Daemon 版本。
- containerd version / runc version:运行时层组件版本。
- Storage Driver:镜像/容器的文件系统驱动。
- Cgroup Driver:资源隔离控制方式。


示例:最小容器运行链路验证#

# 1) 拉取镜像(触发 Registry 交互)
docker pull alpine:3.18

# 2) 运行容器(触发 Daemon -> containerd -> runc)
docker run --rm alpine:3.18 /bin/sh -c "echo hello from container; uname -a"

# 3) 查看容器生命周期对象
docker ps -a

安装与运行验证(最小可运行检查)#

若已在“安装与环境配置”章节完成安装,此处仅做运行验证。

# 检查服务状态
sudo systemctl status docker --no-pager

# 启动/重启服务
sudo systemctl start docker
sudo systemctl restart docker

排错清单(组件层次相关)#

1) daemon 未运行

# 现象:Cannot connect to the Docker daemon
sudo systemctl status docker
sudo journalctl -u docker -n 100 --no-pager

2) 权限不足

# 现象:permission denied while trying to connect
sudo usermod -aG docker $USER
newgrp docker

3) containerd/runc 异常

# 现象:OCI runtime create failed
sudo systemctl status containerd --no-pager
sudo journalctl -u containerd -n 100 --no-pager

练习#

1) 使用 docker info 找出当前的 Storage DriverCgroup Driver,解释它们在架构层次中的位置。
2) 运行一个 alpine 容器并查看其进程树,验证 runc 创建进程的效果。
3) 手工停止 Docker Daemon,复现客户端报错并使用日志定位原因。