Docker 是云原生最核心的内容,下满我就全面来详解Docker容器技术原理 @mikechen
Docker容器
Docker 是一个开源的容器化平台,让开发者可以把应用程序及其所有依赖。

比如:代码、运行时、系统工具、系统库、配置文件等打包成一个轻量、可移植、可一致运行的容器(Container)。
一句话总结:Docker 让“我的电脑上能跑,到你电脑上也能跑,到生产环境也能跑”成为现实。
它极大解决了:“在我本地跑得好好的,到你机器上就出问题了”,这种经典的环境不一致问题。
Docker容器技术原理
Docker 并没有发明什么新技术,它只是将 Linux 既有的内核特性。
比如:Namespace, Cgroups, UnionFS通过更优雅的方式封装在了一起。
Namespace(命名空间)解决了隔离的问题,它让容器内的进程觉得自己拥有一个独立的 Linux 环境。

内核目前提供了 6-7 种主要的 Namespace,它们共同构建了容器的“障眼法”:
PID Namespace: 让容器内的进程拥有独立的 PID 树。
Network Namespace: 独立的网卡、IP、路由表,实现容器的网络虚拟化。
Mount Namespace: 挂载点隔离,让容器看到的文件目录结构独立。
UTS Namespace: 独立的主机名(Hostname)和域名(Domain name)。
IPC Namespace: 隔离进程间通信(如信号量、共享内存)。
User Namespace: 独立的 UID/GID 映射。
Cgroups
Cgroups(Control Groups),负责对CPU、内存、块设备I/O、网络带宽等资源进行限制、配额与统计。
Cgroups 与 Namespace 结合,既保证了容器的隔离性,又实现了多租户环境下的资源公平与稳定性。

其主要功能包括:
限制(limit):为容器分配上限,如内存上限、CPU share。
保护(isolation):防止单个容器耗尽宿主机资源。
控制(control):动态调整资源分配策略。
UnionFS:分层文件系统
UnionFS (Union File System) ,是 Docker 镜像实现的核心。
它是一种分层、轻量级、高性能的文件系统,支持将多个目录挂载到同一个虚拟文件系统下。

分层镜像(layered images):镜像由只读层按顺序叠加,每一层记录增量变化,便于复用与节省存储。
写时复制(Copy-on-Write):容器对文件的写操作不直接修改只读层,而是将文件复制到可写层,保持镜像层不可变。
最终,UnionFS 与、 Namespace、Cgroups 配合,提供容器运行时的文件系统视图与持久化策略。