公司动态
Docker容器技术原理
Docker容器技术原理一、容器技术本质容器底层原理容器不是虚拟机本质是受 Namespace 隔离、CGroup 资源限制、UnionFS(Overlay2)做分层文件系统拥有独立文件系统的普通进程直接复用宿主机 Linux 内核。镜像提供只读 rootfs 模板实例化后生成容器容器新增可写层运行业务进程。三大核心支撑技术Namespace命名空间实现隔离把进程的 PID、网络、挂载、用户、主机名等系统资源隔开容器内部看不到宿主机其他进程资源。CGroup实现资源限制对 CPU、内存等硬件资源做配额管控限制容器能使用多少宿主机资源。UnionFS联合文件系统Docker 默认 Overlay2实现镜像分层存储多层镜像叠加形成容器统一文件视图。容器 vs 传统虚拟机对比容器共享宿主机内核启动秒级资源损耗极小隔离基于内核隔离强度弱于虚拟机。虚拟机Hypervisor 之上运行完整 Guest OS启动慢资源开销大硬件级强隔离。运行时分层低层运行时runc负责调用内核做 Namespace、CGroup 配置启动容器进程。高层运行时containerd封装低层提供镜像管理、容器生命周期管理、API 能力。二、Docker 存储原理Overlay2Docker 默认存储驱动为 overlay2属于 UnionFS 实现。将镜像拆分为多层只读层容器启动时新增一层可写层。目录位置宿主机/var/lib/docker/overlay2存放各层文件merged目录是多层叠加后给容器看到的完整文件视图。写时复制 CoW修改文件时把只读层文件拷贝到上层可写层再修改只读镜像层不会改动。查看命令docker info | grep Storage Driver查看存储驱动mount可以看到 overlay2 挂载信息。三、Namespace 命名空间详解作用内核级隔离手段把系统资源划分到不同命名空间不同命名空间进程互相看不见。主要隔离类型PID、NET 网络、MNT 挂载、UTS 主机名、USER 用户、IPC 进程通信。查看宿主机ls -l /proc/pid/ns可以查看一个进程的各个命名空间容器拥有独立的 ns。注意Namespace 只做隔离不限制资源用量资源限制交给 CGroup 完成。四、Docker Bridge 网络模式默认网络组件虚拟网桥docker0每一个容器一对veth‑pair虚拟网卡一端在容器 netns一端挂接 docker0 网桥。三种流量转发流程容器之间互通同一网桥数据包直接走 docker0 网桥转发不经过宿主机物理网卡宿主机也可以直接访问容器内网 IP。容器访问外网iptables POSTROUTING 链执行MASQUERADE源地址伪装 SNAT将容器内网 IP 替换成宿主机网卡 IP 向外发包。外部访问容器端口映射‑p外部流量到宿主机iptables PREROUTING 链执行DNAT把宿主机端口转换为容器内部 IP 端口经由 docker0 网桥交给目标容器。底层依靠 iptables NAT 规则完成地址转换。五、镜像与容器简单补充镜像多层只读文件静态模板容器镜像运行起来的实例拥有一层可写层。Dockerfile 可以构建自定义镜像每一条指令生成镜像一层。六、易考简答浓缩容器本质隔离 资源限制的进程复用宿主机内核。三大技术Namespace 做隔离CGroup 做资源限制UnionFS (overlay2) 做分层文件系统。Bridge 网络三场景容器间互通走网桥容器出网 MASQUERADE外部访问容器 DNAT 端口映射。容器和虚拟机最大区别容器共享内核轻量虚拟机有独立完整操作系统重、隔离更强。runc 底层干活containerd 做高层管理dockerd 是 docker 守护进程。