Skip to content

容器化部署(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 进行应用容器化。