源码网商城,靠谱的源码在线交易网站 我的订单 购物车 帮助

源码网商城

Docker Runc容器生命周期详细介绍

  • 时间:2021-05-08 05:12 编辑: 来源: 阅读:
  • 扫一扫,手机访问
摘要:Docker Runc容器生命周期详细介绍
[b]Docker Runc容器生命周期[/b] 容器的生命周期涉及到内部的程序实现和面向用户的命令行界面,runc内部容器状态转换操作、runc命令的参数定义的操作、docker client定义的容器操作是不同的,比如对于docker client的create来说, 语义和runc就完全不同,这一篇文章分析runc的容器生命周期的抽象、内部实现以及状态转换图。理解了runc的容器状态转换再对比理解docker client提供的容器操作命令的语义会更容易些。 [b]容器生命周期相关接口[/b] [list] [*]最基本的required的接口 [list]
  • Start: 初始化容器环境并启动一个init进程,或者加入已有容器的namespace并启动一个setns进程;执行postStart hook; 阻塞在init管道的写端,用户发信号替换执行真正的命令[/*] [*]Exec: 读init管道,通知init进程或者setns进程继续往下执行[/*] [*]Run: Start + Exec的组合[/*] [*]Signal: 向容器内init进程发信号[/*] [*]Destroy: 杀掉cgroups中的进程,删除cgroups对应的path,运行postStop的hook[/*] [*]其他 [list]
  • Set: 更新容器的配置信息,比如修改cgroups resize等[/*] [*]Config: 获取容器的配置信息[/*] [*]State: 获取容器的状态信息[/*] [*]Status: 获取容器的当前运行状态: created、running、pausing、paused、stopped[/*] [*]Processes: 返回容器内所有进程的列表[/*] [*]Stats: 容器内的cgroups统计信息[/*] [/list]
  • [*]对于linux容器定义并实现了特有的功能接口 [list]
  • Pause: free容器中的所有进程[/*] [*]Resume: thaw容器内的所有进程[/*] [*]Checkpoint: criu checkpoint[/*] [*]Restore: criu restore[/*] [/list]
  • [/list] [/list] 接口在内部的实现 [list] [*]对于Start/Run/Exec的接口是作为不同os环境下的标准接口对开发者暴露,接口在内部的实现有很多重复的部分可以统一,因此内部的接口实际上更简洁,这里以linux容器为例说明 [list]
  • 对于Start/Run/Exec在内部实现实际上只用到下面两个函数,通过传入flag(容器是否处于stopped状态)区分是创建容器的init进程还是创建进程的init进程 [list]
  • start: 创建init进程,如果status == stopped,则创建并执行newInitProcess,否则创建并执行newSetnsProcess,等待用户发送执行信号(等在管道写端上),用用户的命令替换掉[/*] [*]exec: 读管道,发送执行信号[/*] [/list]
  • [*]Start直接使用start[/*] [*]Run实际先使用start(doInit = true),然后exec[/*] [*]Exec实际先使用start(doInit = false), 然后exec[/*] [/list] [/list] 对用户暴露的命令行参数与容器接口的对应关系,以linux容器为例 [list] [*]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 [list]
  • pause -> Pause[/*] [*]resume -> Resume[/*] [*]checkpoint -> Checkpoint[/*] [*]restore -> Restore[/*] [/list]
  • [/list] runc命令行的动作序列对容器状态机的影响 [list] [*]对于一个容器的生命周期来说,稳定状态有4个: stopped、created、running、paused[/*] [*]注意下面状态转换图中的动作是runc命令行参数动作,不是容器的接口动作,这里没考虑checkpoint相关的restore状态[/*] [/list]
       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 ---------------------------|
    感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!
    • 全部评论(0)
    联系客服
    客服电话:
    400-000-3129
    微信版

    扫一扫进微信版
    返回顶部