Skip to content

核心概念

Docker 是什么

Docker 是一个容器化平台,能把应用及其运行环境(代码、运行时、系统库、配置)打包成一个可移植的单元——镜像,并在任意装有 Docker 的机器上以容器形式运行。

一句话:“一次构建,到处运行”(Build once, run anywhere)。

容器 vs 虚拟机

维度容器虚拟机
隔离级别进程级(共享宿主机内核)硬件级(虚拟整套硬件)
启动速度秒级甚至毫秒级分钟级
资源占用MB 级GB 级(需独立 Guest OS)
性能损耗接近原生有一定损耗
便携性镜像小、分发快镜像大、分发慢
虚拟机(每台含完整 OS):              容器(共享内核):
┌──────────────┐  ┌──────────────┐     ┌────┐ ┌────┐ ┌────┐
│ App  │ App   │  │ App          │     │ A  │ │ B  │ │ C  │
│ Bins │ Bins  │  │ Bins         │     ├────┤ ├────┤ ├────┤
│ Guest OS     │  │ Guest OS     │     │ 容器引擎 (Docker)  │
├──────────────┤  ├──────────────┤     ├─────────────────┤
│ Hypervisor(虚拟硬件层)      │     │ 宿主操作系统内核     │
├─────────────────────────────┤     ├─────────────────┤
│ 宿主操作系统                 │     │ 硬件               │
├─────────────────────────────┤     └─────────────────┘
│ 硬件                        │
└─────────────────────────────┘

注:Colima/WSL2 这类方案在 macOS/Windows 上仍需一个轻量 Linux 虚拟机来提供内核,但容器本身仍共享该内核。

三个核心对象

镜像(Image)

  • 只读的模板,包含运行应用所需的文件系统和启动配置。
  • 分层存储(UnionFS / OverlayFS),每一层是一次变更。
  • Dockerfile 构建,或从仓库 pull

容器(Container)

  • 镜像的运行实例,在镜像层之上加了一层可写层。
  • 生命周期:创建 → 运行 → 停止 → 删除。
  • 删除容器不删除镜像;删除镜像前必须先删除依赖它的容器。

仓库(Registry)

  • 存放与分发镜像的服务。默认是 Docker Hub
  • 命名格式:[registry/][namespace/]name[:tag]
    • nginxdocker.io/library/nginx:latest
    • gcr.io/kubernetes/etcd:3.5.0

三者关系:

Dockerfile --build--> 镜像 --run--> 容器 --commit--> 新镜像
镜像 <--pull/push--> 仓库(Registry)

整体架构

Docker 采用 客户端-服务端(C/S) 架构:

┌──────────────┐         ┌─────────────────────────┐
│  docker CLI   │  REST   │  dockerd(守护进程)      │
│  (客户端)      │ ──────▶ │  - 镜像管理              │
└──────────────┘  API    │  - 容器管理              │
                          │  - 网络/存储             │
                          │  - 通过 containerd 调    │
                          │    runc 创建容器         │
                          └─────────────────────────┘
  • docker CLI:命令行客户端,你输入的命令。
  • dockerd:守护进程,真正干活的服务端,监听 /var/run/docker.sock
  • containerd / runc:底层容器运行时,负责真正创建、运行容器。
  • OCI 标准:镜像格式与运行时规范,保证跨实现兼容(Docker、Podman、containerd 等)。

docker version 若只显示 Client 而无 Server,说明守护进程没起来或连接不到(见 08-排错)。

分层与写时复制(COW)

镜像分层示例(以 nginx:alpine 为例,示意):

layer 5: CMD ["nginx","-g","daemon off;"]   ← 启动命令(元数据)
layer 4: COPY nginx.conf /etc/nginx/         ← 你自己的配置
layer 3: apk add nginx                       ← 安装 nginx
layer 2: apk add libc ca-certificates        ← 依赖
layer 1: alpine base image                    ← 基础系统
─────────────────────────────────────────────
容器可写层(新建/修改的文件都写在这里,随容器删除而消失)

好处:

  • 复用:多个镜像共享相同基础层,节省磁盘与拉取时间。
  • 增量:只下载缺失的层。
  • 缓存:Dockerfile 中未变化的层直接复用缓存,加快构建。

常用概念速览

术语含义
Dockerfile构建镜像的脚本
build构建镜像
tag镜像标签(版本号)
pull / push从仓库拉取 / 推送镜像
registry镜像仓库(Docker Hub 等)
container容器,镜像运行实例
volume数据卷,持久化存储
bind mount挂载宿主机目录
network容器网络
compose多容器编排工具

学习提醒

  • 先理解 镜像 = 模板、容器 = 实例,这是所有操作的基础。
  • 一切状态都可查询:docker psdocker imagesdocker inspect
  • 容器默认是无状态的:删掉容器,其内部未持久化的数据就没了(见 网络与存储)。