容器核心概念:容器与虚拟机的区别
第一阶段:容器基础·容器与虚拟机的区别
容器与虚拟机的区别
- 虚拟机:通过 Hypervisor 模拟完整硬件,每个虚拟机包含独立的 Guest 操作系统,资源开销大,启动慢。
- 容器:共享宿主机操作系统内核,通过操作系统级虚拟化实现进程隔离,资源占用小,启动快。
Namespace(资源隔离)
- 概念:Linux 内核提供的机制,使一组进程看到独立的系统资源视图。
- 实现:为每个容器创建独立的 Namespace 实例,内核在访问资源时根据进程所属的 Namespace 进行映射。
- PID Namespace:隔离进程 ID 空间,容器内进程 PID 从 1 开始,宿主机上实际为其他值。
- NET Namespace:隔离网络栈(网卡、路由表、端口、套接字)。
- MNT Namespace:隔离文件系统挂载点,容器拥有独立的根文件系统视图。
- UTS Namespace:隔离主机名和域名。
- IPC Namespace:隔离进程间通信资源(如信号量、消息队列)。
- USER Namespace:隔离用户 ID,允许容器内 root 映射为宿主机非特权用户。
Cgroups(资源限制)
- 概念:Linux 内核功能,将进程分组并对组内进程使用的资源(CPU、内存、磁盘 IO 等)进行统计、限制和优先级分配。
- 实现:通过虚拟文件系统(通常挂载于
/sys/fs/cgroup/)操作控制组。- cpu 子系统:使用 CFS(完全公平调度器)配额和周期限制 CPU 时间;或使用 cpuset 绑定特定 CPU 核心。
- memory 子系统:限制内存使用量,超出时触发 OOM Killer。
- blkio 子系统:限制块设备读写速率。
- pids 子系统:限制进程总数。
- 典型流程:容器运行时为每个容器创建控制组目录,写入限制值,然后将容器进程 PID 加入该组。
0