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。

为什么要用容器?

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

相关推荐
谙弆悕博士12 小时前
debian快速换源
linux·运维·windows·debian·下载·换源·网络问题
.道阻且长.12 小时前
Linux基本开发工具:编译器gcc/g++
linux·运维·服务器·职场和发展
Decay__18 小时前
05_MySQL 常用 SQL 大全 —— 诊断、管理、优化辅助 SQL 与三大系统库速查
运维·数据库·sql·mysql·架构
贞明电子20 小时前
工业三色报警灯怎么接入项目系统?开关量与RS485控制应用指南
运维·网络·微信公众平台·贞明电子
HideF21 小时前
Linux
linux·服务器·网络
万联WANFLOW21 小时前
海外网络故障怎么排查?Cloudflare 三季度断网报告解读与 mtr 实战
运维·网络·故障分析
sbjdhjd21 小时前
网工进阶笔记:H3CSE 园区网全栈技术与协议汇总
网络·笔记·云计算·ssh·网络工程·vlan·aaa
Ruiery1 天前
Linux 6.6内核内存管理深度解析(十三):slab/slub 分配器
linux·运维·服务器
乌恩大侠1 天前
从 AI-RAN 到 AI Agent:基于 NVIDIA Nemotron 构建 5G/6G 智能网络故障诊断系统
服务器·人工智能·5g·o-ru·ai-ran·电信大模型
Decay__1 天前
04_MySQL DBA 日常运维手册 —— 会话管理、锁与阻塞、事务监控、慢查询与日志巡检
运维·数据库·sql·mysql·架构