国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 網(wǎng)站 > 建站經(jīng)驗 > 正文

Docker Runc容器生命周期詳細介紹

2019-11-02 16:37:27
字體:
供稿:網(wǎng)友

Docker Runc容器生命周期

容器的生命周期涉及到內(nèi)部的程序?qū)崿F(xiàn)和面向用戶的命令行界面,runc內(nèi)部容器狀態(tài)轉(zhuǎn)換操作、runc命令的參數(shù)定義的操作、docker client定義的容器操作是不同的,比如對于docker client的create來說,

語義和runc就完全不同,這一篇文章分析runc的容器生命周期的抽象、內(nèi)部實現(xiàn)以及狀態(tài)轉(zhuǎn)換圖。理解了runc的容器狀態(tài)轉(zhuǎn)換再對比理解docker client提供的容器操作命令的語義會更容易些。

容器生命周期相關(guān)接口

最基本的required的接口

Start: 初始化容器環(huán)境并啟動一個init進程,或者加入已有容器的namespace并啟動一個setns進程;執(zhí)行postStart hook; 阻塞在init管道的寫端,用戶發(fā)信號替換執(zhí)行真正的命令 Exec: 讀init管道,通知init進程或者setns進程繼續(xù)往下執(zhí)行 Run: Start + Exec的組合 Signal: 向容器內(nèi)init進程發(fā)信號 Destroy: 殺掉cgroups中的進程,刪除cgroups對應的path,運行postStop的hook 其他

Set: 更新容器的配置信息,比如修改cgroups resize等 Config: 獲取容器的配置信息 State: 獲取容器的狀態(tài)信息 Status: 獲取容器的當前運行狀態(tài): created、running、pausing、paused、stopped Processes: 返回容器內(nèi)所有進程的列表 Stats: 容器內(nèi)的cgroups統(tǒng)計信息 對于linux容器定義并實現(xiàn)了特有的功能接口

Pause: free容器中的所有進程 Resume: thaw容器內(nèi)的所有進程 Checkpoint: criu checkpoint Restore: criu restore

接口在內(nèi)部的實現(xiàn)

對于Start/Run/Exec的接口是作為不同os環(huán)境下的標準接口對開發(fā)者暴露,接口在內(nèi)部的實現(xiàn)有很多重復的部分可以統(tǒng)一,因此內(nèi)部的接口實際上更簡潔,這里以linux容器為例說明

對于Start/Run/Exec在內(nèi)部實現(xiàn)實際上只用到下面兩個函數(shù),通過傳入flag(容器是否處于stopped狀態(tài))區(qū)分是創(chuàng)建容器的init進程還是創(chuàng)建進程的init進程

start: 創(chuàng)建init進程,如果status == stopped,則創(chuàng)建并執(zhí)行newInitProcess,否則創(chuàng)建并執(zhí)行newSetnsProcess,等待用戶發(fā)送執(zhí)行信號(等在管道寫端上),用用戶的命令替換掉 exec: 讀管道,發(fā)送執(zhí)行信號 Start直接使用start Run實際先使用start(doInit = true),然后exec Exec實際先使用start(doInit = false), 然后exec

對用戶暴露的命令行參數(shù)與容器接口的對應關(guān)系,以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命令行的動作序列對容器狀態(tài)機的影響

對于一個容器的生命周期來說,穩(wěn)定狀態(tài)有4個: stopped、created、running、paused 注意下面狀態(tài)轉(zhuǎn)換圖中的動作是runc命令行參數(shù)動作,不是容器的接口動作,這里沒考慮checkpoint相關(guān)的restore狀態(tài)
   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 ---------------------------|
發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 长岛县| 中方县| 田阳县| 丰城市| 十堰市| 万载县| 深水埗区| 隆子县| 星子县| 苏尼特右旗| 济宁市| 巴彦淖尔市| 班玛县| 扬中市| 宁阳县| 绍兴市| 遵义市| 竹山县| 尚义县| 雅江县| 株洲县| 阳泉市| 德江县| 中西区| 老河口市| 阜新市| 洛宁县| 通城县| 敦化市| 平果县| 保靖县| 荥阳市| 临海市| 大城县| 峡江县| 繁峙县| 厦门市| 沧源| 九江县| 柘城县| 望谟县|