容器核心概念:容器与虚拟机的区别

发表于
更新于
2 1.0~1.3 分钟 472

第一阶段:容器基础·容器与虚拟机的区别

容器与虚拟机的区别

  • 虚拟机:通过 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

推荐文章

OCI 标准概述
上一篇 Kubernetes 网络模型与实现
下一篇 Docker 实际应用:构建自定义镜像