Skip to main content
Documents
Toggle Dark/Light/Auto mode Toggle Dark/Light/Auto mode Toggle Dark/Light/Auto mode Back to homepage

Docker 基础教程

🐳 Docker 核心概念

理解 Docker 的世界,必须从 4 大核心对象 + 2 大运行机制 + 1 套生态体系 入手。

1. 四大核心对象(100% 必须掌握)

1.1 Image(镜像)—— 应用的模板

  • 镜像是 只读模板,包含:
  • 文件系统(rootfs)
  • 软件依赖
  • 配置、环境
  • 入口命令
  • 类似虚拟机的“快照”,但轻量得多。

✅ 它不可变(immutable)。

📌 镜像 = 分层(layers)+ 元数据(config)

1.2 Container(容器)—— 镜像的运行实例

容器 = 镜像(只读层) + 可写层(容器层)

  • 相当于由镜像启动的“进程实例”,不是虚拟机。
  • 可删、可重建、可替换。
  • 尽量:无状态、可丢弃、随起随灭

✅ 一个镜像可以运行出多个容器。

1.3 Registry(镜像仓库)—— 镜像的仓库

常见:

  • Docker Hub
  • Harbor(企业级)
  • GitHub Container Registry
  • 阿里云 / 腾讯云

你 push、pull 的对象都是 镜像 (Image)。

1.4 Dockerfile —— 镜像的构建文件

简化理解:

  • Dockerfile = 描述“如何制造镜像”的脚本

关键指令:

  • FROM
  • RUN
  • COPY / ADD
  • ENV
  • EXPOSE
  • CMD / ENTRYPOINT
  • WORKDIR

🔑 镜像是由 Dockerfile 一步步构建出来的,每一步形成一层(Layer)。

2. 两大运行机制(理解后 Docker 才“通”)

2.1 OverlayFS(联合文件系统 / Layer)机制

Docker 镜像由多层组成:

例:

ubuntu:latest
├─ Layer A (基础)
├─ Layer B (apt-get...)
└─ Layer C (copy...)

容器创建时,再叠加一个可写层:

container FS
├─ Container Writable Layer
└─ Image Layers (readonly)

📌 优点:

  • 多镜像复用基础层(极大节省空间)
  • 更新镜像非常快
  • 构建、拉取、分发都更高效

2.2 Namespace + Cgroup(Linux 容器隔离技术)

容器不是虚拟机,本质是 受隔离和限制的 Linux 进程。

Namespace -> 隔离

隔离以下内容:

  • PID
  • Network
  • Mount
  • User
  • IPC
  • UTS

-> 使容器有自己的进程树、主机名、网络栈等。

Cgroup -> 资源控制

限制容器:

  • CPU
  • 内存
  • IO
  • PID 数量

📌 理解这一点,你就知道容器为什么“轻量”。

3. Docker 生态核心概念

3.1 Docker Engine

  • runC(OCI 容器 runtime)
  • containerd(管理容器生命周期)
  • dockerd(Docker 的 daemon)

运行 docker run:

docker CLI -> dockerd -> containerd -> runC -> 启动容器

3.2 Docker Network(容器网络)

网络驱动模式:

模式 说明
bridge(默认) 容器互通,但独立于宿主机
host 容器共享宿主机网络
none 无网络
overlay(Swarm / k8s) 跨宿主机容器网络
macvlan 给容器分配独立 MAC 和 IP

简化理解:

  • bridge -> 安全
  • host -> 性能高
  • macvlan -> 容器像物理机

3.3 Volume(数据卷)

容器无状态,数据存储需要“卷”。

Volume 类型:

  • managed volume:由 Docker 管理(推荐)
  • bind mount:映射宿主机目录
  • tmpfs(内存)

作用:

  • 持久化数据
  • 在容器间共享数据
  • 性能高于写入容器层

3.4 Docker Compose(多容器编排)

用于开发环境的多容器管理:

  • 启动/停止多个服务
  • 网络自动化
  • Volume 自动化

生产不建议用 Compose(建议用 k8s)。

3.5 Docker Plugin(CLI 扩展 / Volume / Network 插件)

例如:

docker volume plugin
docker network plugin
docker cli plugin

你正在做的“docker jbuild”就是 CLI 插件。

4. Docker 生命周期

镜像生命周期:

build -> tag -> push -> pull -> run

容器生命周期:

create -> start -> running -> stop -> remove

容器可重建,但 volume 要持久化。

5. 常见“本质性误解”纠正

错误理解 正确理解
容器是虚拟机 ❌ 容器是受隔离的进程
镜像是单个文件 ❌ 镜像是多层文件系统
使用 docker 需要学很多命令 ❌ 只要掌握 12 条命令就够
Dockerfile 越复杂越好 ❌ 越简单越好(可复用)
容器应该保存数据 ❌ 数据必须放 Volume

6. 最关键的三句话总结

  • 容器不是虚拟机,而是隔离的进程。
  • 镜像不可变,有层(layer)结构。
  • 生产环境需要“无状态容器 + 有状态卷 + 镜像仓库”。