Runc容器生命周期

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/feilengcui008/article/details/53410708

容器的生命周期涉及到内部的程序实现和面向用户的命令行界面,runc内部容器状态转换操作、runc命令的参数定义的操作、docker client定义的容器操作是不同的,比如对于docker client的create来说,
语义和runc就完全不同,这一篇文章分析runc的容器生命周期的抽象、内部实现以及状态转换图。理解了runc的容器状态转换再对比理解docker client提供的容器操作命令的语义会更容易些。


容器生命周期相关接口

  • 最基本的required的接口
    • Start: 初始化容器环境并启动一个init进程,或者加入已有容器的namespace并启动一个setns进程;执行postStart hook; 阻塞在init管道的写端,用户发信号替换执行真正的命令
    • Exec: 读init管道,通知init进程或者setns进程继续往下执行
    • Run: Start + Exec的组合
    • Signal: 向容器内init进程发信号
    • Destroy: 杀掉cgroups中的进程,删除cgroups对应的path,运行postStop的hook
    • 其他
      • Set: 更新容器的配置信息,比如修改cgroups resize等
      • Config: 获取容器的配置信息
      • State: 获取容器的状态信息
      • Status: 获取容器的当前运行状态: created、running、pausing、paused、stopped
      • Processes: 返回容器内所有进程的列表
      • Stats: 容器内的cgroups统计信息
    • 对于linux容器定义并实现了特有的功能接口
      • Pause: free容器中的所有进程
      • Resume: thaw容器内的所有进程
      • Checkpoint: criu checkpoint
      • Restore: criu restore

接口在内部的实现

  • 对于Start/Run/Exec的接口是作为不同os环境下的标准接口对开发者暴露,接口在内部的实现有很多重复的部分可以统一,因此内部的接口实际上更简洁,这里以linux容器为例说明
    • 对于Start/Run/Exec在内部实现实际上只用到下面两个函数,通过传入flag(容器是否处于stopped状态)区分是创建容器的init进程还是创建进程的init进程
      • start: 创建init进程,如果status == stopped,则创建并执行newInitProcess,否则创建并执行newSetnsProcess,等待用户发送执行信号(等在管道写端上),用用户的命令替换掉
      • exec: 读管道,发送执行信号
    • Start直接使用start
    • Run实际先使用start(doInit = true),然后exec
    • Exec实际先使用start(doInit = false), 然后exec

对用户暴露的命令行参数与容器接口的对应关系,以linux容器为例

  • create -> Start(doInit = true)
  • start -> Exec
  • run -> Run(doInit = true)
  • exec -> Run(doInit = false)
  • kill -> Signal
  • delete -> Signal and Destroy
  • update -> Set
  • state -> State
  • events -> Stats
  • ps -> Processes
  • list
  • linux specific
    • pause -> Pause
    • resume -> Resume
    • checkpoint -> Checkpoint
    • restore -> Restore

runc命令行的动作序列对容器状态机的影响

  • 对于一个容器的生命周期来说,稳定状态有4个: stopped、created、running、paused
  • 注意下面状态转换图中的动作是runc命令行参数动作,不是容器的接口动作,这里没考虑checkpoint相关的restore状态

      delete
     |------|   /-------------------------------------------------------------|
     |      |  /                                    |----- start ---|         |
     |      V /                                     |               |         |
    |---------| ----------- create ----------> |---------|<---------/         |
    | stopped |                                | created |------------|       |
    |---------| <-------- delete(with kill)--- |---------|            |       |
      ^   ^                                            |              |       |
      |   |                                            |              |      run
      |   |--------------- delete(-f with kill) ---|  exec            |       |
 delete(-f with kill)                              |   |              |       |
      |                                            |   |              |       |
      |                      resume                |   V              |       |
    |---------| -----------------------------> |----------|           |       |
    | paused  |                                |  running |<----------|-------|
    |---------| <----------------------------  |----------|           |
        ^                     pause             ^        |            |
        |                                       |        |            |
        |                                       |--exec--|            |
        |                                                             |
        |--------------------------- pause ---------------------------|
优秀的个人博客,低调大师

微信关注我们

原文链接:https://yq.aliyun.com/articles/632392

转载内容版权归作者及来源网站所有!

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。

相关文章

发表评论

资源下载

更多资源
优质分享Android(本站安卓app)

优质分享Android(本站安卓app)

近一个月的开发和优化,本站点的第一个app全新上线。该app采用极致压缩,本体才4.36MB。系统里面做了大量数据访问、缓存优化。方便用户在手机上查看文章。后续会推出HarmonyOS的适配版本。

Apache Tomcat7、8、9(Java Web服务器)

Apache Tomcat7、8、9(Java Web服务器)

Tomcat是Apache 软件基金会(Apache Software Foundation)的Jakarta 项目中的一个核心项目,由Apache、Sun 和其他一些公司及个人共同开发而成。因为Tomcat 技术先进、性能稳定,而且免费,因而深受Java 爱好者的喜爱并得到了部分软件开发商的认可,成为目前比较流行的Web 应用服务器。

Eclipse(集成开发环境)

Eclipse(集成开发环境)

Eclipse 是一个开放源代码的、基于Java的可扩展开发平台。就其本身而言,它只是一个框架和一组服务,用于通过插件组件构建开发环境。幸运的是,Eclipse 附带了一个标准的插件集,包括Java开发工具(Java Development Kit,JDK)。

Sublime Text 一个代码编辑器

Sublime Text 一个代码编辑器

Sublime Text具有漂亮的用户界面和强大的功能,例如代码缩略图,Python的插件,代码段等。还可自定义键绑定,菜单和工具栏。Sublime Text 的主要功能包括:拼写检查,书签,完整的 Python API , Goto 功能,即时项目切换,多选择,多窗口等等。Sublime Text 是一个跨平台的编辑器,同时支持Windows、Linux、Mac OS X等操作系统。