主题
Docker 技术栈总览
一句话定位:Docker 是容器化技术,核心思想是「隔离」——它不模拟完整操作系统,而是让应用直接运行在宿主机内核上,用轻量的「边界」把进程相互隔开。
一、核心三要素
| 概念 | 本质 | 类比 |
|---|---|---|
| 镜像 image | 只读模板,含运行服务所需的一切 | 类(Class) |
| 容器 container | 由镜像创建、可启动/停止/删除的运行实例 | 实例(Object) |
| 仓库 registry | 保存用户构建镜像的注册中心 | Maven 中央仓库 |
关键不变量:一个镜像可以创建多个容器;镜像是只读的,容器运行时的改动都发生在「容器层」,镜像层可被多个容器共享。
二、底层机制:隔离 + 限制
Docker 靠 Linux 两个内核特性实现「边界」:
- Namespace(隔离):修改进程视图,让进程只能看到限定的文件/网络/进程等。
- Cgroups(限制):限制进程组可用的资源上限(CPU、内存等)。
关键认知:容器 = 宿主机上的一个普通进程,只是启动时加了一组 Namespace 参数 + 受 Cgroups 配额约束。真正负责隔离的是宿主机操作系统内核,不是 Docker Engine。详见 容器隔离原理-Namespace与Cgroups。
三、镜像分层
Docker 镜像由多层文件系统叠加(UnionFS 联合文件系统):
可写层(容器层) ← 容器运行时所有改动发生在这里
───────────────
镜像层 N(只读) ← 可被多个容器共享、复用
...
镜像层 1(只读)
───────────────
bootfs(bootloader + kernel,加载后卸载)复用是分层的最大价值:基于已有镜像构建新镜像,只新增变化层,节省磁盘与传输。详见 Docker镜像分层与联合文件系统。
四、数据卷
容器删除则容器层数据随之消失;需要持久化的数据用数据卷——把宿主机目录映射到容器目录,容器内写数据同步到宿主机。
五、网络
- 四种模式:bridge(默认)/ none / host / container。
- 默认网络
bridge网关docker0,用 evth-pair 技术;默认网络内容器只能通过 IP 通信,不能用容器名(--link可补)。 - 自定义网络(
docker network create --driver bridge --subnet ... --gateway ...)维护了「容器名 ↔ IP」映射,容器之间可直接用容器名通信;不同网络间默认隔离,需docker connect显式打通。
六、Dockerfile
用声明式指令(FROM / RUN / COPY / CMD / ENTRYPOINT / EXPOSE 等)定义镜像构建步骤,一条指令通常对应一层镜像。
关联
- 上游:1.Docker介绍 · Docker的实现基础 · 3.镜像原理
- 同域:容器隔离原理-Namespace与Cgroups · Docker镜像分层与联合文件系统 · Kubernetes技术栈总览
- 域地图:运维与云原生