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 Driver 和 Cgroup Driver,解释它们在架构层次中的位置。
2) 运行一个 alpine 容器并查看其进程树,验证 runc 创建进程的效果。
3) 手工停止 Docker Daemon,复现客户端报错并使用日志定位原因。