runC源码分析——Create/Run Container

本文详细解析了runC源码中的CreateCommand&RunCommand流程。从main.startContainer方法开始,通过createflag区分create和run操作。主要包括创建容器文件系统及初始化Linux容器对象,启动容器内的进程。涉及namespace隔离、配置传递及进程关联等关键技术。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

本文是对runC源码的核心部分——Create Command & Run Command 进行源码分析。

对应的code workflow如下所示:
这里写图片描述

you should make sence these points:

  1. runC create command 和 run command的流程入口统一从/runc/utils_linux.go#334 main.startContainer方法,通过create flag进行区分。
  2. 业务逻辑中,主要有两个step构成:
    • firstly create container filesystem and construct a linuxcontainer object by creatContainer function.
    • secondly start process in container by runner.run function.
  3. 主要的逻辑在process的启动过程,注意以下几点:
    • 对于namespace的隔离,主要通过bootstrapData封装好clone flags。
    • 由sendconfig将bootstrapData封装的config传给容器起的init process。
    • 调用系统setns进行namespace和process 的associate。
    • oom_score_adj and rlimits等都在这里完成设置。

其中还是很多复杂的业务逻辑,需要读者跟着代码深入去研究,这里只是抛砖引玉。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值