Docker核心技术
Docker 容器技术的核心:在于实现进程、和资源的隔离、与管理。
这主要依赖于 Linux 内核的两大特性:Namespace(命名空间)和Cgroups(控制组)。
Namespace 实现了隔离 (Isolation):,它让容器拥有自己独立的系统视图,包括进程、网络、文件系统挂载点等。
Cgroups 实现了资源管理 (Resource Management),它限制和监控容器可以使用的资源,例如 CPU、内存、磁盘 I/O 等。
这两者相互配合,为 Docker 容器提供了基本的隔离性和资源控制能力,是 Docker 实现容器化的关键技术。
Namespace
Namespace 通过创建独立的系统资源视图,实现容器进程的环境隔离,确保容器内进程只能访问自身资源,增强安全性和隔离性。
Namespace 机制是 Linux 内核提供的一种隔离机制,它可以将全局的系统资源进行虚拟化。
使得不同的进程组(通常是 Docker 容器)拥有自己独立的资源实例,彼此之间互不干扰。
Docker 利用了以下几种关键的 Namespace:
Namespace 类型 | 描述 | unshare /ip netns 示例 |
---|
pid |
隔离进程编号 | 每个容器有独立的 PID 1 |
net |
隔离网络设备、端口、路由等 | 容器有独立网卡 |
ipc |
隔离信号量、共享内存等 | 防止 IPC 污染 |
mnt |
隔离挂载点和文件系统视图 | 容器挂载根不同 |
uts |
隔离主机名和域名 | 每个容器自定义 hostname |
user |
隔离用户与 UID 映射 | 实现 rootless 容器 |
通过这些命名空间,Docker 创建了一个个独立的运行环境,使得容器内的进程仿佛运行在独立的操作系统中,互不干扰。
Cgroups
Cgroups 负责:限制、和管理容器的资源使用,防止资源争抢,保障系统整体稳定和性能。
支持的资源类型包括:
cpu
: 控制 CPU 使用率;cpuacct
: 统计 CPU 使用情况;memory
: 控制内存使用;blkio
: 控制块设备 I/O;net_cls
: 标记网络数据包以进行流量控制;pids
: 控制进程数量。
比如::CPU(核心数、时间片权重)
docker run -it --cpus="1.0" ubuntu
意思是这个容器,最多使用 1 个 CPU 核心的计算能力。
内存(最大使用量),比如:
docker run -it --cpu-shares=512 ubuntu
磁盘 I/O(读写速率),比如:
docker run -it --device-write-bps /dev/sda:5mb ubuntu
网络带宽,比如:
sudo tc qdisc add dev vethXXXX root tbf rate 1mbit burst 32kbit latency 400ms
进程数量(PIDs),比如:
docker run -it --pids-limit=100 ubuntu
mikechen
mikechen睿哥,10年+大厂架构经验,资深技术专家,就职于阿里巴巴、淘宝、百度等一线互联网大厂。
关注「mikechen」公众号,获取更多技术干货!

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