Docker 的快速性是其核心优势,以下是其快速性的4大关键原因@mikechen
1. 轻量级隔离:共享主机内核,秒级启动
Docker 并不像虚拟机那样模拟整套硬件并安装操作系统,而是采用了 操作系统级虚拟化:
-
所有容器共享宿主机内核;
-
每个容器运行在独立的用户空间中;
-
利用 Linux 的 Namespace + Cgroups 实现进程级隔离;
📌 容器本质上就是一个被隔离的普通进程,启动只需创建进程 + 挂载文件系统,无需启动内核或服务,大多数容器可以在 几百毫秒内启动。
2. 分层存储:UnionFS 减少冗余,加速构建和启动
UnionFS 联合文件系统: Docker 镜像采用分层结构,每一层都是对文件系统的增量修改。
UnionFS 技术将这些只读层联合挂载成一个统一的文件系统,供容器使用。
这样有如下好处:
减少冗余
多个镜像可以共享相同的底层镜像层,只需存储各自独特的差异部分,极大地节省了磁盘空间。
加速构建
在构建镜像时,Docker 会缓存每一层,如果 Dockerfile 中的指令没有改变,构建过程可以重用之前的镜像层,显著加快了构建速度。
加速启动
当启动容器时,Docker 只需要加载必要的镜像层。
如果某些层已经被其他容器使用,可以直接复用内存中的缓存,无需重复加载,从而加速了容器的启动过程。
3. 低资源占用:只包含必要依赖,运行效率高
Docker 容器只打包应用程序及其必要的依赖库、运行时环境和配置文件。
不包含完整的操作系统,这使得容器的体积通常比虚拟机镜像小得多。
由于容器只运行应用程序所需的组件,因此其对 CPU、内存和磁盘 I/O 等资源的消耗也远低于运行完整操作系统的虚拟机。
这使得在同一台物理机上可以运行更多的容器,提高了资源利用率和运行效率。
4. 高效运行时:containerd 和 runc 直接操作内核
Docker 的运行机制也非常高效,核心依赖两个关键运行组件:
containerd: Docker 架构中的一个核心组件,负责管理容器的生命周期,包括创建、启动、停止、删除等。
runc: 一个轻量级的、符合 OCI (Open Container Initiative) 标准的容器运行时。
runc 直接与 Linux 内核交互,利用 Namespaces 和 Cgroups 等内核特性来创建和运行容器。
直接操作内核: runc
作为底层的容器运行时,直接调用内核接口来创建和管理容器的隔离环境和资源限制。
避免了额外的中间层开销,从而实现了高效的容器运行。
mikechen
mikechen睿哥,10年+大厂架构经验,资深技术专家,就职于阿里巴巴、淘宝、百度等一线互联网大厂。
关注「mikechen」公众号,获取更多技术干货!

后台回复【架构】即可获取《阿里架构师进阶专题全部合集》,后台回复【面试】即可获取《史上最全阿里Java面试题总结》