怎么理解 RunC 作为 OCI 标准运行时在宿主机操作系统层面的最终容器容器落地过程

胖墨小哥_5696

胖墨小哥_5696

2026-06-25

568人浏览

原创

runc 是 oci 运行时规范的参考实现,仅将符合规范的文件系统 bundle 通过 linux 内核原语(命名空间、cgroups、pivot_root 等)在宿主机内核中启动为隔离进程,不抽象不调度不管理镜像与日志。

怎么理解 runc 作为 oci 标准运行时在宿主机操作系统层面的最终容器容器落地过程

RunC 是 OCI 运行时规范的参考实现,它不抽象、不封装、不调度,只做一件事:把一个符合 OCI 规范的文件系统 bundle,在宿主机 Linux 内核上真正跑起来——这个“落地”过程,本质就是用内核原语把进程变成容器。

OCI bundle 是启动前提

RunC 不接受镜像名(比如 runc run nginx:latest 是错的),它只认一个目录:里面必须有 config.json(遵循 runtime-spec)和 rootfs/(挂载好的完整根文件系统)。这个目录叫 bundle,是镜像解包后的产物。Docker 或 buildkit 会通过 docker export 或 umoci unpack 等工具把镜像转成 bundle,RunC 才能接手。

核心动作靠 Linux 内核能力驱动

RunC 启动容器时,并不启动新内核或虚拟机,而是调用一组底层系统调用,直接在当前宿主机内核中构造隔离环境:

协同养育操作系统
协同养育操作系统

协同养育操作系统(Co-Parenting OS)— 离异家庭专业协同养育支持系统。12模块覆盖接送管理、成长记忆库、孩子观察站、亲子关系粘合剂、共同挑战中心、情绪冲突观察、父母成长、成长档案馆、成长阶段引擎、风险预警、驾驶舱、被恶意攻击急救包。当用户涉及离异家庭育儿、协同养育、抚养探视、接送安排、孩子成长记录、亲子关系、离异冲突、被恶意攻击、前任矛盾等话题时触发。

下载
  • clone() 创建新进程,同时指定 CLONE_NEW* 标志(如 NEWPID、NEWNS、NEWNET),启用对应命名空间
  • unshare() 在已有进程中分离出新的命名空间(例如为 init 进程单独设置 mount namespace)
  • setns() 把进程加入已创建的命名空间(多用于 join 模式或调试场景)
  • cgroups v1/v2 接口写入:按 config.json 中 linux.resources 字段,把 PID 写入 cgroup.procs,设置 cpu.weight、memory.max 等限制
  • chdir + pivot_root / chroot:切换到 rootfs 目录,再用 pivot_root 将其设为新根目录(--no-pivot 可跳过,但安全性下降)

容器进程就是普通进程,只是被“罩住了”

最终运行起来的容器,就是一个或一组普通 Linux 进程,PID 显示在宿主机上(ps aux | grep 能看到),但它被限制在自己的 PID 命名空间里看不到其他进程,网络栈走独立 netns,文件系统根目录被 pivot 到 bundle 的 rootfs 下,资源受 cgroup 控制。RunC 本身在容器启动后基本退出(除非 attach 或 --detach=false),后续生命周期由内核和 cgroup 子系统维持。

没有守护进程,也不管理镜像或日志

RunC 是纯粹的“一次性运行时工具”:

  • 不监听端口、不维护状态数据库、不拉取镜像
  • 日志输出直接连到 stdout/stderr,由调用方(如 containerd)接管并落盘
  • 容器退出后,RunC 不清理 rootfs 或 cgroup,这些由上层(如 crictl、kubelet)负责回收
  • 所有安全策略(seccomp、apparmor、capabilities)都来自 config.json 的 linux.seccomp 和 linux.capabilities 字段,RunC 只执行应用,不决策

相关文章

PHP速学视频免费教程(入门到精通)
PHP速学视频免费教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

相关标签:

操作系统

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
视频服务器配置参数有哪些
视频服务器配置参数有哪些

视频服务器配置参数有处理器、内存、存储、视频编解码器、网络接口、视频输入输出接口、操作系统、安全性、环境适应性和成本。在搭建视频服务器时,需要根据实际需求和预算,合理选择这些参数,以实现高性能、高稳定性和低成本的目标。

2023.10.17

4240

11

linux的操作系统介绍
linux的操作系统介绍

Linux是一个灵活、稳定、安全的操作系统,适用于各种不同的应用场景,从个人电脑到服务器和嵌入式系统。想了解更多Linux的相关内容,可以阅读本专题下面的文章。

2024.03.20

3366

12

Linux操作系统的主要用途
Linux操作系统的主要用途

Linux操作系统用途广泛,包括:服务器运营,软件开发,科学研究和教育,嵌入式系统,以及个人电脑和笔记本电脑。想了解更多Linux的相关内容,可以阅读本专题下面的文章。

2024.03.21

5739

8

linux操作系统的作用
linux操作系统的作用

linux操作系统在以下领域发挥着关键作用:服务器和云计算;嵌入式系统;个人电脑和笔记本电脑;超级计算;其他领域等等。想了解更多linux操作系统的相关内容,可以阅读本专题下面的文章。

2024.04.12

2695

5

有哪些常见的网络操作系统
有哪些常见的网络操作系统

常见的网络操作系统有windows server、linux、unix、macos server、freebsd、cisco ios、juniper junos和hp-ux等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2024.09.12

3264

6

32位操作系统怎么改成62位的
32位操作系统怎么改成62位的

要将 32 位操作系统升级到 64 位,需要遵循以下步骤:1. 检查硬件和软件兼容性;2. 备份数据;3. 获取 64 位操作系统;4. 创建可启动安装媒体;5. 从安装媒体启动计算机;6. 选择“升级”选项;7. 完成安装。

2025.04.02

3343

9

FrankenPHP集成Laravel详细教程
FrankenPHP集成Laravel详细教程

本专题提供FrankenPHP集成Laravel的详细配置指南,全面解析运行原理、开发环境搭建、Caddyfile配置、Octane工作模式、数据库连接、队列任务、定时任务和生产环境优化,解决部署过程中常见的报错与兼容性问题。

2026.10.08

0

20

LLVM自定义Pass怎么写
LLVM自定义Pass怎么写

本专题聚焦LLVM自定义Pass开发,整理Pass类结构、run()方法、PreservedAnalyses、CMake构建、插件注册、-load-pass-plugin加载和测试用例编写流程。

2026.09.30

120

10

LLVM RISC-V参数配置教程
LLVM RISC-V参数配置教程

本专题介绍LLVM对RISC-V基础ISA和扩展的支持方式,涵盖RV32、RV64、标准扩展、实验性扩展、厂商扩展、-menable-experimental-extensions和版本差异。

2026.09.30

100

14

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
光速学会docker容器
光速学会docker容器

共33课时 | 3万人学习

Valgrind支持平台说明
Valgrind支持平台说明

共0课时 | 0人学习

ubuntu官方总文档
ubuntu官方总文档

共0课时 | 0人学习