02.Docker 核心概念

1. 三大核心概念

用快递物流来类比,Docker 的三大核心概念就很好理解了:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
┌──────────────────────────────────────────────────────────────┐
│ Docker 三大核心概念 │
├──────────────────────────────────────────────────────────────┤
│ │
│ 镜像 (Image) 容器 (Container) 仓库 (Registry)│
│ ┌─────────┐ ┌─────────┐ ┌─────────┐ │
│ │ 📦 │ │ 🚚 │ │ 🏭 │ │
│ │ 货物的 │ ──────> │ 运输中的 │ <────── │ 物流 │ │
│ │ 标准包装 │ 实例化 │ 集装箱 │ 存储 │ 仓库 │ │
│ └─────────┘ └─────────┘ └─────────┘ │
│ │
│ • 只读模板 • 镜像的运行实例 • 存储和分发镜像 │
│ • 包含运行环境 • 可以启动/停止 • 公有/私有 │
│ • 分层存储 • 有自己的文件系统 • Docker Hub │
│ │
└──────────────────────────────────────────────────────────────┘

镜像(Image)—— 货物的标准包装

  • 镜像是一个只读模板,包含了运行应用所需的一切:代码、运行时、库、环境变量、配置文件
  • 就像一个”快照”,记录了某个时刻的完整环境
  • 可以基于一个镜像创建多个容器

容器(Container)—— 运输中的集装箱

  • 容器是镜像的运行实例
  • 每个容器都是相互隔离的,有自己的文件系统、网络、进程空间
  • 容器可以被创建、启动、停止、删除
  • 容器中的数据默认不会持久化(除非使用数据卷)

仓库(Registry)—— 物流仓库

  • 用来存储和分发镜像
  • Docker Hub 是最大的公共仓库,类似 GitHub
  • 企业可以搭建私有仓库

2. Docker 架构

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
┌───────────────────────────────────────────────────────────────────┐
│ Docker 架构图 │
├───────────────────────────────────────────────────────────────────┤
│ │
│ Client (客户端) Docker Host (Docker 主机) │
│ ┌─────────────────┐ ┌───────────────────────────┐│
│ │ docker build │ │ Docker Daemon ││
│ │ docker pull │ ──REST API──> │ (dockerd) ││
│ │ docker run │ │ ┌─────────────────────┐ ││
│ └─────────────────┘ │ │ Containers │ ││
│ │ │ ┌───┐ ┌───┐ ┌───┐ │ ││
│ │ │ │ C │ │ C │ │ C │ │ ││
│ │ │ └───┘ └───┘ └───┘ │ ││
│ │ └─────────────────────┘ ││
│ │ ┌─────────────────────┐ ││
│ │ │ Images │ ││
│ │ │ ┌───┐ ┌───┐ ┌───┐ │ ││
│ │ │ │ I │ │ I │ │ I │ │ ││
│ │ │ └───┘ └───┘ └───┘ │ ││
│ │ └─────────────────────┘ ││
│ └───────────────────────────┘│
│ ▲ │
│ │ │
│ pull/push │
│ │ │
│ ▼ │
│ ┌───────────────────────────┐│
│ │ Registry ││
│ │ (Docker Hub) ││
│ │ ┌─────────────────────┐ ││
│ │ │ nginx, mysql, redis │ ││
│ │ │ node, python, ... │ ││
│ │ └─────────────────────┘ ││
│ └───────────────────────────┘│
└───────────────────────────────────────────────────────────────────┘

组件说明:

  • Docker Client:命令行工具,用户通过它与 Docker Daemon 交互
  • Docker Daemon (dockerd) :后台服务,负责管理镜像、容器、网络、存储
  • Docker Registry:镜像仓库,存储和分发镜像