Docker是云原生的核心,掌握好Docker核心原理,对于掌握好Docker至关重要@mikechen
Docker
Docker 是一个开源的容器化平台,它允许开发者将应用程序、及其依赖项打包到一个称为容器的轻量级、可移植的单元中。

这些容器可以在任何支持 Docker 的环境中运行,从而实现了“一次构建,到处运行”的目标。
Docker 提供了快速构建、测试和部署应用程序的工具,缩短了开发周期。
Docker 容器非常适合:用于构建、和部署微服务应用程序。
Docker核心原理
Docker 的核心原理:基于 Linux 内核的以下三个关键特性。

Linux Namespace(命名空间)机制
命名空间是 Linux 内核提供的一种资源隔离机制,能让不同的进程组看到不同的系统视图(如 PID、网络、文件系统等)。
Docker 利用 Namespace 来创建隔离的容器环境,使得每个容器都拥有自己的独立命名空间,包括:
| 类型 | 隔离资源 | 示例 |
|---|
pid |
进程号空间 | 容器内看不到宿主进程 |
net |
网络接口、端口等 | 每个容器拥有独立 IP |
mnt |
挂载点、文件系统 | 容器内部的目录结构隔离 |
uts |
主机名、域名 | 容器拥有自己的 hostname |
ipc |
信号量、消息队列 | 容器间 IPC 隔离 |
user |
用户和权限 | 容器可映射非 root 用户 |
Linux Cgroups(控制组)机制
Cgroups 是 Linux 内核的另一项功能,它允许限制和隔离进程的资源使用。

Docker 利用 Cgroups 来控制容器的资源消耗,包括:
CPU: 限制 CPU 使用率;
比如:限制 CPU 核心
docker run --cpus=1 nginx
内存: 限制内存使用量;
比如:限制容器最多只能使用 512M 内存:
docker run -m 512m nginx
磁盘 I/O: 限制磁盘读写速度;
网络带宽: 限制网络带宽。
通过以上面的限制,可以防止某个容器占满系统资源,以及控制资源成本。
联合文件系统(UnionFS)机制
UnionFS 是一种分层文件系统,可以将多个目录(层)合并成一个虚拟文件系统,实现镜像的分层构建与复用。

UnionFS 是一种分层文件系统,它允许将多个文件系统层叠加在一起,形成一个单一的文件系统视图。
当容器启动时,Docker 在只读层之上创建一个可写层,容器对文件系统的修改都发生在这一层。
这种分层结构使得镜像构建和分发更加高效,并且节省了存储空间。
总之,Docker核心原理:本质是 Linux 内核的 Namespace、Cgroups 和 UnionFS 三大机制的完美组合。
陈睿mikechen
10年+大厂架构经验,资深技术专家,就职于阿里巴巴、淘宝、百度等一线互联网大厂。
关注作者「mikechen」公众号,获取更多技术干货!
后台回复【架构】,即可获取《阿里架构师进阶专题全部合集》,后台回复【面试】即可获取《史上最全阿里Java面试题总结》