Docker 架构组件
Docker 采用 C/S 架构,下面梳理其核心组件与交互流程。
核心组件
Docker Client (客户端)
Docker CLI 是用户与 Docker 交互的主要方式:
Bash
# 客户端发送命令
docker run -d -p 80:80 nginx
- 解析用户命令
- 通过 REST API 发送请求给 Docker Daemon
- 可配置连接远程 Daemon(
DOCKER_HOST)
Docker Daemon (服务端)
dockerd 是后台运行的守护进程:
Bash
# 查看 Daemon 状态
systemctl status docker
# 查看 Daemon 日志
journalctl -u docker
核心职责:
- 接收并处理客户端请求
- 管理镜像、容器、网络、存储卷
- 与 Containerd 交互创建/管理容器
Containerd
容器运行时管理组件:
Bash
Docker Daemon → Containerd → containerd-shim → runc → 容器
- 管理容器生命周期(创建、启动、停止、删除)
- 镜像存储与分发
- 网络与存储管理
- 独立项目,可脱离 Docker 使用(如 Kubernetes)
runc
底层容器创建工具,遵循 OCI(Open Container Initiative)规范:
- 调用 Linux Namespace 实现隔离
- 调用 Cgroups 实现资源限制
- 轻量级,仅负责单个容器的创建
组件交互流程
运行容器流程
Bash
用户执行: docker run nginx
↓
Docker CLI 发送 REST API 请求
↓
Docker Daemon 接收请求
↓
检查本地是否有 nginx 镜像
↓ (无镜像)
从 Registry 拉取镜像
↓
调用 Containerd 创建容器
↓
Containerd 调用 containerd-shim
↓
containerd-shim 调用 runc
↓
runc 创建 Namespace + Cgroups,启动容器进程
查看组件版本
JSON
# Docker 版本
docker version
# Containerd 版本
containerd --version
# runc 版本
runc --version
Docker Registry
镜像仓库,存储和分发镜像:
Bash
Docker Hub (公共)
↓
私有 Registry (Harbor、AWS ECR 等)
↓
docker pull/push 交互
text
# 从 Registry 拉取
docker pull nginx:latest
# 推送到 Registry
docker push myregistry.com/myapp:v1
# 登录认证
docker login myregistry.com
配置文件
Docker Daemon 配置
/etc/docker/daemon.json:
text
{
"registry-mirrors": ["https://mirror.ccs.tencentyun.com"],
"insecure-registries": ["192.168.1.100:5000"],
"data-root": "/var/lib/docker",
"log-driver": "json-file",
"log-opts": {
"max-size": "10m",
"max-file": "3"
}
}
修改后重启:
text
sudo systemctl daemon-reload
sudo systemctl restart docker
要点总结
- Docker 采用 C/S 架构:CLI → Daemon → Containerd → runc → 容器
- Docker CLI 通过 REST API 与 Daemon 通信
- Daemon 管理所有 Docker 资源(镜像、容器、网络、卷)
- Containerd 负责容器生命周期,runc 负责底层隔离
- Registry 存储和分发镜像,Docker Hub 是默认公共仓库
📝 发现内容有误?点击此处直接编辑