🐋 Docker 命令执行流程图

详细展示 docker 典型命令在 Docker 系统各层组件间的流程流转

📋 快速导航


🏗️ Docker 整体架构图

💾 存储与网络层

🔧 高级运行时层

🎛️ Docker 守护进程层

🔄 典型命令流程

docker ps
📋 列出容器

docker run
🚀 运行容器

docker rm
🗑️ 删除容器

docker logs
📜 查看日志

docker images
🖼️ 列出镜像

docker pull
⬇️ 拉取镜像

⚡ 低级运行时层

🚀 runc
🔹 OCI 运行时
🔹 容器创建
🔹 进程管理
🔹 Namespace 隔离

🔌 containerd-shim
🔹 容器进程守护
🔹 IO 重定向
🔹 信号转发

🖥️ 用户层

👤 用户

🐋 docker CLI
🔹 命令行客户端
🔹 REST API 调用
🔹 用户交互界面

⚙️ dockerd
🔹 Docker 守护进程
🔹 API 服务器
🔹 镜像管理
🔹 网络管理

🌐 Docker Registry
🔹 镜像仓库
🔹 Docker Hub
🔹 私有仓库

🛠️ containerd
🔹 容器生命周期管理
🔹 镜像拉取与存储
🔹 网络配置
🔹 存储管理

💽 存储驱动
🔹 镜像层存储
🔹 容器读写层
🔹 数据卷管理

🌐 网络驱动
🔹 Bridge 网络
🔹 Host 网络
🔹 Overlay 网络

守护进程层交互

存储网络层交互

样式


⏱️ 详细执行时序图

Syntax error in textmermaid version 11.4.0

🔍 关键流程说明

📋 docker ps 查询流程

  1. API 调用:docker CLI 向 dockerd 发送 REST API 请求
  2. 容器查询:dockerd 通过 containerd 获取容器状态信息
  3. 结果返回:数据经过格式化后返回给用户

⬇️ docker pull 拉取流程

  1. 镜像查询:dockerd 向 Registry 查询镜像 manifest
  2. 层下载:并行下载镜像的各个层
  3. 本地存储:存储驱动将镜像层保存到本地文件系统

🚀 docker run 运行流程

  1. 镜像准备:检查镜像是否存在,不存在则自动拉取
  2. 容器创建:containerd 创建容器实例和网络配置
  3. 进程启动:runc 设置隔离环境并启动容器进程
  4. 守护监控:containerd-shim 负责容器进程的生命周期管理

🗑️ docker rm 删除流程

  1. 容器停止:发送 SIGTERM 信号优雅停止,必要时使用 SIGKILL
  2. 资源清理:清理容器读写层、网络配置等资源
  3. 状态更新:从容器列表中移除容器记录

📜 docker logs 日志流程

  1. 日志请求:dockerd 通过 containerd 请求容器日志
  2. 文件读取:containerd-shim 从存储中读取日志文件
  3. 流式返回:日志以流的形式实时返回给用户

🖼️ docker images 镜像流程

  1. 本地查询:dockerd 通过存储驱动查询本地镜像
  2. 元数据获取:收集镜像大小、创建时间等元数据
  3. 格式化输出:将镜像列表格式化显示给用户

🏗️ Docker 架构分层说明

🖥️ 用户层

  • docker CLI:用户交互的命令行工具,通过 REST API 与 dockerd 通信

🎛️ 守护进程层

  • dockerd:Docker 的核心守护进程,负责 API 服务、镜像管理、网络管理
  • Docker Registry:镜像仓库,可以是 Docker Hub 或私有仓库

🔧 高级运行时层

  • containerd:高级容器运行时,负责容器生命周期管理、镜像存储、网络配置

⚡ 低级运行时层

  • runc:OCI 标准的容器运行时,负责实际创建和运行容器
  • containerd-shim:容器守护进程,负责容器进程的监控和 IO 重定向

💾 基础设施层

  • 存储驱动:管理镜像层和容器读写层(overlay2、aufs 等)
  • 网络驱动:提供容器网络功能(bridge、host、overlay 等)

🔗 相关资源

容器技术基础

相关架构图

学习资源


💡 实用提示

🔧 调试技巧

  • 使用 docker system df 查看 Docker 空间使用情况
  • 使用 docker system events 实时监控 Docker 事件
  • 使用 docker inspect 查看容器或镜像的详细信息

🚀 性能优化

  • 使用多阶段构建减小镜像大小
  • 合理使用 .dockerignore 文件
  • 利用镜像层缓存机制加速构建

🔒 安全最佳实践

  • 不在镜像中存储敏感信息
  • 使用非 root 用户运行容器
  • 定期更新基础镜像和依赖

说明:本文档详细展示了 Docker 各组件间的交互流程,有助于理解 Docker 的内部工作机制和容器技术的底层原理。