Skip to content
Docker 核心概念

Docker 核心概念

Docker 的三大核心组件:镜像(Image)容器(Container)仓库(Registry)


类比理解

概念 类比 说明
镜像(Image) 模具 / Java 类 静态的、只读的模板,定义了运行环境的全部内容
容器(Container) 月饼 / Java 对象 镜像的运行实例,可创建、启动、停止、删除
仓库(Registry) Maven 仓库 / npm registry 存储和分发镜像的中心化服务

镜像(Image)

什么是镜像

镜像是一个只读模板,包含了运行某个应用所需的全部内容:操作系统、运行时、库、代码、配置。镜像采用分层存储(UnionFS),每层只记录与上一层的差异。

┌──────────────────┐
│   Writable Layer  │ ← 容器层(读写)
├──────────────────┤
│   Layer 3: App    │ ← 镜像层(只读)
├──────────────────┤
│   Layer 2: Nginx  │
├──────────────────┤
│   Layer 1: Debian │
├──────────────────┤
│   Layer 0: bootfs │
└──────────────────┘

🔬 深入原理:Docker 使用 Overlay2 存储驱动,通过联合文件系统(UnionFS)将多个只读层叠加为一个视图。写操作触发 Copy-on-Write:当容器需要修改某个文件时,先将该文件从只读层复制到容器的可写层,再在可写层修改。这就是为什么容器启动快、占用空间小——只记录增量。

镜像命名规范

[registry/][namespace/]repository[:tag]

# 完整形式
docker.io/library/nginx:latest

# 省略形式(等于上面)
nginx
部分 说明 默认值
registry 镜像仓库地址 docker.io(Docker Hub)
namespace 命名空间/用户名 library(官方镜像)
repository 镜像名 必填
tag 版本标签 latest

🚨 陷阱latest 标签不代表最新版本——它只是默认 tag,由镜像作者决定指向哪个版本。生产环境必须显式指定版本号

镜像分层与复用

多个镜像可以共享相同的底层,节省磁盘空间:

镜像 A: [Debian] → [Python 3.11] → [App_A v1.0]     ← App_A 特有层
镜像 B: [Debian] → [Python 3.11] → [App_B v2.3]     ← App_B 特有层
         ↑           ↑                共享底层

容器(Container)

什么是容器

容器是镜像的一个运行实例。可以将其理解为一个轻量级的、隔离的进程运行环境。容器之间相互隔离,但与宿主机共享内核。

特性 容器 虚拟机
启动速度 秒级 分钟级
资源占用 MB 级别 GB 级别
隔离程度 进程级(共享内核) 硬件级(独立 OS)
可运行数量 数千个 数十个

容器生命周期

pull/create → start → running → stop → stopped
                  ↓                ↓
               restart ←────── paused
                  ↓
                kill → stopped
                  ↓
                rm   (容器被删除)

容器的状态

状态 说明
created 已创建但未启动
running 正在运行
paused 已暂停(进程冻结)
stopped 已停止(exit code 可查)
dead 被守护进程标记为不可恢复

仓库(Registry)

什么是 Registry

Registry 是镜像的存储和分发中心。Docker Hub 是官方公共 Registry,也可以搭建私有 Registry。

docker pull nginx
     │
     ▼
Docker Hub (docker.io)
     ├── library/nginx
     │   ├── latest  → manifest  → 实际层数据
     │   ├── 1.25    → manifest  → 实际层数据
     │   └── 1.24    → manifest  → 实际层数据
     └── user/other-image
         └── v1.0

镜像拉取流程

  1. Docker 客户端向 Registry 请求镜像的 manifest
  2. manifest 中列出了镜像包含的所有 层(layers)
  3. Docker 客户端检查本地已有哪些层
  4. 并行拉取缺失的层
  5. 校验 SHA256 摘要
  6. 解压并存储

性能提示:拉取镜像时 Docker 默认并行下载 3 层(可通过 --max-concurrent-downloads 调整)。如果镜像共享已有镜像的底层,这些层会被跳过(“Already exists”)。

常见 Registry

Registry 地址 说明
Docker Hub docker.io 官方公共仓库
GitHub Container Registry ghcr.io GitHub 提供的容器仓库
Google Container Registry gcr.io Google Cloud 容器仓库
Alibaba Cloud ACR registry.cn-hangzhou.aliyuncs.com 阿里云容器镜像服务
Harbor 自建 企业级开源 Registry

架构概览

┌────────────────────────────────────────────┐
│                Docker 客户端                 │
│            (docker CLI / API)              │
└──────────────┬─────────────────────────────┘
               │ REST API (Unix Socket / TCP)
┌──────────────▼─────────────────────────────┐
│              Docker Daemon                  │
│  ┌──────────┐ ┌──────────┐ ┌────────────┐  │
│  │ 镜像管理  │ │ 容器管理  │ │ 网络管理   │  │
│  └──────────┘ └──────────┘ └────────────┘  │
│  ┌──────────┐ ┌──────────┐                 │
│  │ 卷管理    │ │ containerd│               │
│  └──────────┘ └─────┬────┘               │
└─────────────────────┼──────────────────────┘
                      │
              ┌───────▼───────┐
              │   runc       │
              │ (OCI Runtime) │
              └───────────────┘
  • Docker CLI:用户使用的命令行工具
  • Docker Daemon (dockerd):后台服务,管理镜像、容器、网络、卷
  • containerd:管理容器生命周期的守护进程
  • runc:OCI 标准的容器运行时,实际创建和运行容器