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。

为什么要用容器?

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

相关推荐
江屿风1 小时前
【Linux系统】【Linux 进程程序替换机制解析及自定义 Shell 核心逻辑实现 】流食般投喂
linux·运维·服务器·开发语言·笔记
BJ_Bonree1 小时前
博睿数据加入ITSS分会,成为国家级信息技术服务标准化体系单位成员!
大数据·运维·数据库·人工智能·可观测性
好不玩呀1 小时前
一次PXE服务器上IPV6问题的记录
linux·运维·服务器
NetInside_1 小时前
从 EMA 网络可观测性研究看:混合网络时代,企业运维正在发生什么变化?
运维·网络
PiaoKe___3 小时前
云手机原理与 Python 自动化实战:ADB 批量控制、任务调度与落地建议
服务器·arm开发·python·自动化
Madison-No710 小时前
搭建项目测试环境
linux·运维·服务器·python
吴声子夜歌11 小时前
Shell编程实例——编写安全的shell脚本(二)
linux·运维·shell
悠悠1213811 小时前
微服务通信别只看性能:REST 与 gRPC 的 6 个选型判断和一次 502 故障复盘
运维·服务器