Skip to content

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 等)定义镜像构建步骤,一条指令通常对应一层镜像。

关联

最近更新