Docker运行原理
Docker 是一种轻量级容器化技术,允许开发者打包应用及其依赖到一个可移植的容器中,并在不同环境中一致运行。
Docker 容器运行时的核心原理,可以从: 架构组成、核心技术 、和 运行流程 三个层面来理解。
Docker架构
Docker架构,如下图所示:
1. Docker Client(客户端)
与用户交互,如执行 docker run
、docker build
等命令。
实际不做执行逻辑,而是将请求发给 Docker Daemon。
2. Docker Daemon(服务端)
是 Docker 的守护进程,运行在后台。
负责构建、运行和管理容器生命周期。
对接 Linux 内核的相关技术(如 namespace、cgroups)。
3. Docker Registry(镜像仓库)
存储镜像(如官方的 Docker Hub、本地 Harbor)。
docker pull
、docker push
与之交互。
4. Docker Image & Container
Image(镜像):只读模板,如应用快照。
Container(容器):镜像运行时的实例,有独立环境和进程空间。
Docker核心技术
Docker 底层,依赖 Linux 的几个核心特性来实现容器隔离、和资源控制。
Linux Namespaces (命名空间):
提供隔离机制,使得每个容器拥有独立的系统视图,包括 PID、网络、挂载点、UTS、IPC 和 User 命名空间。
Linux Cgroups (Control Groups,控制组):
提供资源限制和管理能力,可以限制容器的 CPU、内存、磁盘 I/O 和网络带宽等资源使用。
UnionFS (联合文件系统):
用于构建分层镜像,将多个只读层合并成一个可读写的文件系统,实现镜像的轻量化和高效分发。
容器镜像 (Container Images)
轻量级、可执行的软件包,包含运行应用程序所需的所有内容,例如代码、运行时环境、库、环境变量和配置文件。
容器 (Containers):
镜像的运行时实例,是隔离的进程,拥有自己独立的文件系统、网络和进程空间。
Docker运行流程
Docker运行流程,如下:
用户执行 docker run 命令 ↓ Docker Client 发送请求到 Docker Daemon ↓ Docker Daemon 检查镜像是否存在(本地/远程拉取) ↓ 基于镜像解压生成容器文件系统(利用 UnionFS) ↓ 设置 namespace 和 cgroups,创建隔离环境 ↓ 初始化网络、挂载卷、设置环境变量等 ↓ 调用 containerd + runc 启动容器进程 ↓ 容器开始运行,PID=1 为主进程
总之,Docker 的运行原理基于 Linux 内核的命名空间、Cgroups 和 UnionFS,结合 containerd 等运行时,提供轻量、高效的容器化解决方案。
mikechen
mikechen睿哥,10年+大厂架构经验,资深技术专家,就职于阿里巴巴、淘宝、百度等一线互联网大厂。
关注「mikechen」公众号,获取更多技术干货!

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