Appearance
容器化部署(Docker)架构分析
高层架构
Docker 容器化架构可以分为以下几个层次:
┌─────────────────────────────────────────────────┐
│ 应用层 (Application) │
│ ┌──────────┐ ┌──────────┐ ┌──────────┐│
│ │ Web 应用 │ │ API │ │ Worker ││
│ └──────────┘ └──────────┘ └──────────┘│
├─────────────────────────────────────────────────┤
│ 容器层 (Container) │
│ ┌──────────┐ ┌──────────┐ ┌──────────┐│
│ │ 容器A │ │ 容器B │ │ 容器C ││
│ └──────────┘ └──────────┘ └──────────┘│
├─────────────────────────────────────────────────┤
│ Docker 引擎层 (Docker Engine) │
│ ┌──────────┐ ┌──────────┐ ┌──────────┐│
│ │ 镜像 │ │ 网络 │ │ 存储 ││
│ └──────────┘ └──────────┘ └──────────┘│
├─────────────────────────────────────────────────┤
│ Linux 内核层 (Kernel) │
│ ┌──────────┐ ┌──────────┐ ┌──────────┐│
│ │Namespaces│ │ Cgroups │ │ UnionFS ││
│ └──────────┘ └──────────┘ └──────────┘│
└─────────────────────────────────────────────────┘镜像架构
镜像分层
┌─────────────────────────────────────────────────┐
│ 应用层 (Application Layer) │
│ 应用代码、依赖、配置文件 │
├─────────────────────────────────────────────────┤
│ 运行时层 (Runtime Layer) │
│ Node.js、Python、Java 等运行时 │
├─────────────────────────────────────────────────┤
│ 系统层 (System Layer) │
│ 操作系统库、工具 │
├─────────────────────────────────────────────────┤
│ 基础层 (Base Layer) │
│ 基础操作系统(如 Alpine、Ubuntu) │
└─────────────────────────────────────────────────┘镜像构建流程
┌─────────┐ ┌─────────────┐ ┌──────────┐
│Dockerfile│──────▶│ 构建上下文 │──────▶│ 镜像 │
└─────────┘ └─────────────┘ └──────────┘
│ │ │
│ 解析指令 │ 执行构建步骤
│◀──────────────────│◀──────────────────│
│ │ │
│ 生成镜像 │
│──────────────────────────────────────▶│容器架构
容器生命周期
┌─────────┐ ┌─────────────┐ ┌──────────┐
│ 创建 │──────▶│ 启动 │──────▶│ 运行 │
└─────────┘ └─────────────┘ └──────────┘
│ │ │
│ │ │
│ │ 停止 │
│ │──────────────────▶│
│ │ │
│ │ 暂停 │
│ │──────────────────▶│
│ │ │
│ │ 删除 │
│ │──────────────────▶│容器隔离
┌─────────────────────────────────────────────────┐
│ 容器隔离 │
├─────────────────────────────────────────────────┤
│ ┌──────────┐ ┌──────────┐ ┌──────────┐│
│ │ PID 隔离 │ │ 网络隔离 │ │ 文件隔离 ││
│ └──────────┘ └──────────┘ └──────────┘│
├─────────────────────────────────────────────────┤
│ ┌──────────┐ ┌──────────┐ ┌──────────┐│
│ │ 用户隔离 │ │ IPC 隔离 │ │ UTS 隔离 ││
│ └──────────┘ └──────────┘ └──────────┘│
└─────────────────────────────────────────────────┘网络架构
Docker 网络模式
┌─────────────────────────────────────────────────┐
│ Docker 网络模式 │
├─────────────────────────────────────────────────┤
│ ┌──────────┐ ┌──────────┐ ┌──────────┐│
│ │ Bridge │ │ Host │ │ None ││
│ └──────────┘ └──────────┘ └──────────┘│
├─────────────────────────────────────────────────┤
│ ┌──────────┐ ┌──────────┐ ┌──────────┐│
│ │ Overlay │ │ Macvlan │ │ Custom ││
│ └──────────┘ └──────────┘ └──────────┘│
└─────────────────────────────────────────────────┘Bridge 网络架构
┌─────────────────────────────────────────────────┐
│ Bridge 网络 │
├─────────────────────────────────────────────────┤
│ ┌──────────┐ ┌──────────┐ ┌──────────┐│
│ │ 容器A │ │ 容器B │ │ 容器C ││
│ └──────────┘ └──────────┘ └──────────┘│
├─────────────────────────────────────────────────┤
│ Docker Bridge (docker0) │
├─────────────────────────────────────────────────┤
│ 宿主机网络接口 │
└─────────────────────────────────────────────────┘存储架构
存储驱动
┌─────────────────────────────────────────────────┐
│ Docker 存储驱动 │
├─────────────────────────────────────────────────┤
│ ┌──────────┐ ┌──────────┐ ┌──────────┐│
│ │ Overlay2 │ │ AUFS │ │ Btrfs ││
│ └──────────┘ └──────────┘ └──────────┘│
├─────────────────────────────────────────────────┤
│ ┌──────────┐ ┌──────────┐ ┌──────────┐│
│ │ ZFS │ │ Device Mapper │ │ VFS ││
│ └──────────┘ └──────────┘ └──────────┘│
└─────────────────────────────────────────────────┘卷管理
┌─────────────────────────────────────────────────┐
│ 卷管理 │
├─────────────────────────────────────────────────┤
│ ┌──────────┐ ┌──────────┐ ┌──────────┐│
│ │ 命名卷 │ │ 匿名卷 │ │ 绑定挂载 ││
│ └──────────┘ └──────────┘ └──────────┘│
├─────────────────────────────────────────────────┤
│ ┌──────────┐ ┌──────────┐ ┌──────────┐│
│ │ 数据持久化 │ │ 数据共享 │ │ 配置管理 ││
│ └──────────┘ └──────────┘ └──────────┘│
└─────────────────────────────────────────────────┘总结
Docker 容器化架构涉及多个层次,从应用层到内核层。理解 Docker 的架构设计,有助于我们更好地使用 Docker 进行应用容器化。
