Docker 容器技术的本质

Docker 是一个开源的应用容器引擎,基于 Go 语言开发。它允许开发者将应用程序及其所有的依赖包打包到一个可移植的容器中,然后发布到任何流行的 Linux 或 Windows 操作系统的机器上。

容器 = CGroup + Namespace + Rootfs + 容器引擎。

容器就是利用 Linux 内核提供的 CGroup 和 Namespace 等技术,将一系列进程隔离在相互独立的环境中进行运行。

实际上,在现代的 Linux 发行版中,任何一组进程都是容器化的:

  • /proc/PID/cgroup 文件保存了进程所属的控制组。
  • /proc/PID/status 文件保存了进程的 Capability 信息。
  • /proc/PID/ns 保存了进程的命名空间。

容器运行时是实现容器的生命周期管理的工具:

  • 容器运行时分为低层(Low‑Level)运行时和高层(High‑level)运行时。
  • 低层运行时调整上述资源限制、安全限制和命名空间,并启动一组受限的进程。典型代表就是 runc。
  • 高层运行时(容器引擎)建立在低层运行时的基础之上,提供 Web API、镜像管理、
  • 容器生命周期管理功能。典型代表是 Containerd(以及基于 Containerd 实现的 Docker)、Podman、CRI‑O。

这个流程体现了 Kubernetes "上层编排调度 + 下层标准化运行时" 的架构设计特点。

kubelet → CRI‑O → runc → Linux 内核

kubelet → containerd → containerd‑shim → runc → Linux 内核

容器镜像是一个分层存储的归档文件(通常为 Tar 格式),包含运行容器所需的所有静态文件和元数据。其核心设计遵循开放容器倡议(OCI)标准,主要包含以下两部分

  • 文件系统层(rootfs):提供容器的根文件系统(rootfs),与宿主机的文件系统隔离,是容器内进程看到的文件系统视图。
  • 配置元数据(JSON 文件):定义容器的运行时行为,包括进程配置、安全权限、环境变量等。关键文件(OCI 标准)有 config.json,包含容器运行时配置;manifest.json,描述镜像的层级结构和配置文件的路径;layer.tar,每个文件系统层对应的压缩包,存储实际文件内容。

容器分为两大类,按照应用场景的不同:

  • 系统容器:专注于模拟系统的整个独立的用户环境,提供完整的交互体验。LXC、LXD、Incus。
  • 应用容器:专注于提供单个服务,容器内的 Rootfs 会进行高度裁剪。Docker、Podman。

为什么要用容器?

容器与虚拟机的技术对比:

相关推荐
yumgpkpm9 分钟前
Acceldata ODP 3.3.6.4 vs CDP Private Cloud Base 7.3.2 对比
大数据·运维·服务器·hadoop·华为·zookeeper·hbase
Liuqy-0519 分钟前
特殊进程——孤儿、僵尸、守护进程
linux·运维·服务器
等我调个Bug1 小时前
【Linux系统篇】权限
linux·服务器
quqi991 小时前
git push permission denied (by quqi99)
ssh
考研保研资料分享1 小时前
自动化控制保研经验合辑:上交夏令营、北工大预推免与跨专业面试复盘(2025)
运维·面试·自动化
乐维_lwops1 小时前
2026选择运维监控系统时应该重点考察哪些功能?
大数据·运维·人工智能
峥无2 小时前
Linux NPTL线程:创建/终止/等待/分离/栈布局内核原理|线程下篇
linux·运维·线程
元岳数字人小元2 小时前
数字人私有化部署:企业级AI数字场景长效落地优选方案
运维·人工智能·开源·人机交互·交互
Thneonl3 小时前
全集群钟差 300 毫秒会发生什么:证书悄悄过期,日志倒流
运维·后端