《容器技術系列》一1.4 Docker運行案例分析

本節書摘來華章計算機《容器技術系列》一書中的第1章 ,第1.4節,孫宏亮 著, 更多章節內容可以訪問云棲社區“華章計算機”公眾號查看。

1.4 Docker運行案例分析

1.3節著重介紹了Docker架構中各個模塊的功能,學完后我們可以對Docker的架構有一個宏觀的認識。熟悉一款軟件,研究一個系統,從靜態的角度認識架構的各個模塊,僅僅是第一步;從動態的角度,掌握軟件或者系統的運行原理,即熟知架構中模塊間的通信邏輯,無疑會讓自己對軟件或系統的理解更上一層樓。本節將從實際的Docker運行案例出發,串聯Docker各模塊,從而學習Docker的運行流程。分析原型為Docker中的docker pull與docker run兩個命令。

1.4.1 docker pull

1.3節中我們提到,用戶可以為容器指定鏡像,作為容器運行時的rootfs,既然如此,鏡像從何而來則成為一個關鍵。答案很簡單,一切都歸功于docker pull命令。
docker pull命令的作用是:Docker Daemon從Docker Registry下載指定的容器鏡像,并將鏡像存儲在本地的Graph中,以備后續創建Docker容器時使用。docker pull命令的執行流程如圖1-10所示。
圖1-10中有編號的箭頭表示docker pull命令在發起后,Docker架構中相應模塊所做的一系列運行操作。下面我們逐一分析這些步驟。
1)Docker Client處理用戶發起的docker pull命令,解析完請求以及參數之后,發送一個HTTP請求給Docker Server,HTTP請求方法為POST,請求URL為"/images/create?"+"xxx",實際意義為下載相應的鏡像。
2)Docker Server接收以上HTTP請求,并交給mux.Router,mux.Router通過URL以及請求方法類型來確定執行該請求的具體handler。
3)mux.Router將請求路由分發至相應的handler,具體為PostImagesCreate。
4)在PostImageCreate這個handler之中,創建并初始化一個名為"pull"的Job,之后觸發執行該Job。
5)名為"pull"的Job在執行過程中執行pullRepository操作,即從Docker Registry中下載相應的一個或者多個Docker鏡像。
6)名為"pull"的Job將下載的Docker鏡像交給graphdriver管理。
7)graphdriver負責存儲Docker鏡像,一方面將實際鏡像存儲至本地文件系統中,另一方面為鏡像創建對象,由Docker Daemon統一管理。

image

1.4.2 docker run

docker run命令的作用是創建一個全新的Docker容器,并在容器內部運行指定命令。Docker Daemon處理用戶發起的這條命令時,所做工作可以分為兩部分:第一,創建Docker容器對象,并為容器準備所需的rootfs;第二,創建容器的運行環境,如網絡環境、資源限制等,最終真正運行用戶指令。因此,在dockerrun命令的完整執行流程中,Docker Client給Docker Server發送了兩次HTTP請求,第二次請求的發起取決于第一次請求的返回狀態。docker run命令執行流程如圖1-11所示。


image

圖1-11中有編號的箭頭表示dockerrun命令在發起后,Docker架構中相應模塊所做的一系列運行。下面我們逐一分析這些步驟:
1)Docker Client處理用戶發起的docker run命令,解析完請求與參數之后,向Docker Server發送一個HTTP請求,HTTP請求方法為POST,請求URL為"/containers/create?"+"xxx",實際意義為創建一個容器對象,即Docker Daemon程序邏輯中的容器對象,并非實際運行的容器。
2)Docker Server接收以上HTTP請求,并交給mux.Router,mux.Router通過URL以及請求方法來確定執行該請求的具體handler。
3)mux.Router將請求路由分發至相應的handler,具體為PostContainersCreate。
4)在PostContainersCreate這個handler之中,創建并初始化一個名為"create"的Job,之后觸發執行該Job。
5)名為"create"的Job在運行過程中執行Container.Create操作,該操作需要獲取容器鏡像來為Docker容器準備rootfs,通過graphdriver完成。
6)graphdriver從Graph中獲取創建Docker容器rootfs所需要的所有鏡像。
7)graphdriver將rootfs的所有鏡像通過某種聯合文件系統的方式加載至Docker容器指定的文件目錄下。
8)若以上操作全部正常執行,沒有返回錯誤或異常,則Docker Client收到Docker Server返回狀態之后,發起第二次HTTP請求。請求方法為"POST",請求URL為"/containers/"+container_ID+"/start",實際意義為啟動時才創建完畢的容器對象,實現物理容器的真正運行。
9)Docker Server接收以上HTTP請求,并交給mux.Router,mux.Router通過URL以及請求方法來確定執行該請求的具體handler。
10)mux.Router將請求路由分發至相應的handler,具體為PostContainersStart。
11)在PostContainersStart這個handler之中,創建并初始化名為"start"的Job,之后觸發執行該Job。
12)名為"start"的Job執行需要完成一系列與Docker容器相關的配置工作,其中之一是為Docker容器網絡環境分配網絡資源,如IP資源等,通過調用networkdriver完成。
13)networkdriver為指定的Docker容器分配網絡資源,其中有IP、port等,另外為容器設置防火墻規則。
14)返回名為"start"的Job,執行完一些輔助性操作后,Job開始執行用戶指令,調用execdriver。
15)execdriver被調用,開始初始化Docker容器內部的運行環境,如命名空間、資源控制與隔離,以及用戶命令的執行,相應的操作轉交至libcontainer來完成。
16)libcontainer被調用,完成Docker容器內部的運行環境初始化,并最終執行用戶要求啟動的命令。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/456182.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/456182.shtml
英文地址,請注明出處:http://en.pswp.cn/news/456182.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

算術編碼的原理與分析

轉自:http://kulasuki115.blogcn.com/diary,201492702.shtml 前言 人類已進入信息時代,信息時代的重要特征是信息的數字化,人們越來越依靠計算機獲取和利用信息,這就需要對信息的表示、存儲、傳輸和處理等關鍵技術進行研究。我們…

3月22日AM

看了思維章節精講視頻課,并且總結了部分思維章節內容轉載于:https://www.cnblogs.com/bgd140206102/p/6601440.html

阿里巴巴Dubbo實現的源碼分析

Dubbo概述Dubbo是阿里巴巴開源出來的一個分布式服務框架,致力于提供高性能和透明化的RPC遠程服務調用方案,以及作為SOA服務治理的方案。它的核心功能包括: remoting:遠程通訊基礎,提供對多種NIO框架抽象封裝,包括“同步…

POJ 2106-Boolean Expressions,雙棧運用類似表達式求值!

Boolean Expressions 首先聲明此題后臺可能極水(畢竟這種數據不好造!)。昨天寫了一天卻總是找不到bug,討論區各種數據都過了,甚至懷疑輸入有問題,但看到gets也可以過,難道是思路錯了&#xff1f…

H264 CAVLC 研究

目錄 1 CAVLC概念 2 CAVLC原理 3 CAVLC編碼流程 4 CAVLC解碼流程 展開全部 1 CAVLC概念 2 CAVLC原理 3 CAVLC編碼流程 4 CAVLC解碼流程 收起 摘要糾錯編輯摘要 CAVLC即基于上下文的自適應變長編碼。H.264標準中使用CAVLC對4*4模塊的亮度和色度殘差數據進行編碼。 CAVLC-CAVLC…

【MySQL 】學習筆記千行總結

/* Windows服務 */ -- 啟動MySQLnet start mysql -- 創建Windows服務sc create mysql binPath mysqld_bin_path(注意:等號與值之間有空格)/* 連接與斷開服務器 */ mysql -h 地址 -P 端口 -u 用戶名 -p 密碼SHOW PROCESSLIST -- 顯示哪些線程正在運行 SHOW VARIABLES…

CCCC 連續因子

題意: 一個正整數N的因子中可能存在若干連續的數字。例如630可以分解為3*5*6*7,其中5、6、7就是3個連續的數字。給定任一正整數N,要求編寫程序求出最長連續因子的個數,并輸出最小的連續因子序列。 輸入格式: 輸入在一行…

Mybatis怎么能看是否執行了sql語句

項目需要學習mybatis中&#xff0c;本來mybatis也不是什么新技術&#xff0c;無奈之前沒接觸過。 驗證緩存機制時&#xff0c;需要能看到是否sql被執行了。這就需要增加日志的打印 配置如下 在pom中增加如下依賴&#xff1a; <dependency> <groupId>org.bgee.log4j…

定時備份 MySQL 并上傳到七牛

定時備份 MySQL 并上傳到七牛 多數應用場景下&#xff0c;我們需要對重要數據進行備份、并放置到一個安全的地方&#xff0c;以備不時之需。 常見的 MySQL 數據備份方式有&#xff0c;直接打包復制對應的數據庫或表文件(物理備份)、mysqldump 全量邏輯備份、xtrabackup 增量邏輯…

vue_props div賦值props定義變量 templete獲取

vue_props div賦值props定義變量 templete獲取 <div id"app"> <add v-bind:btn"h"></add> </div> <script> var vm new Vue({ el: #app, data: { h: "hello" }, components: { "add": { …

H.264句法和語法總結 句法元素的分層結構

在 H.264 定義的碼流中&#xff0c;句法元素被組織成有層次的結構&#xff0c;分別描述各個層次的信息&#xff0c;如下圖所示 在H.264 中&#xff0c;句法元素共被組織成 序列、圖像、片、宏塊、子宏塊五個層次。 在這樣的結構中&#xff0c;每一層的頭部和它的數據部分形成管…

instanceof 的運用

2019獨角獸企業重金招聘Python工程師標準>>> Java 中的instanceof 運算符是用來在運行時指出對象是否是特定類的一個實例。instanceof通過返回一個布爾值來指出&#xff0c;這個對象是否是這個特定類或者是它的子類的一個實例。 用法&#xff1a; result object i…

R 腳本讀取匯總 Excel 表格數據

主要用到了 xlsx 和 rJava 包&#xff0c;打開 Excel 文件&#xff0c;讀取各表格數據&#xff0c;再寫入到匯總表。 下圖為處理前的原始數據表格&#xff1a; 下圖為處理后的數據&#xff1a; 代碼實現 安裝&加載包的函數實現。installed.packages() 函數獲取所有已安裝…

[Grid Layout] Place grid items on a grid using grid-column and grid-row

It’s possible to position a grid item anywhere on a grid track. To do this, let’s specify some grid-template-columns and grid-template-rows, and to the grid items, we’ll pass grid-column and grid-row some numeric values. <!DOCTYPE html> <html l…

【大數據】最新大數據學習路線(完整詳細版,含整套教程)

大數據學習路線 java(Java se,javaweb) Linux(shell,高并發架構,lucene,solr) Hadoop(Hadoop,HDFS,Mapreduce,yarn,hive,hbase,sqoop,zookeeper,flume) 機器學習(R,mahout) Storm(Storm,kafka,redis) Spark(scala,spark,spark core,spark sql,spark streaming,spark mllib,spa…

264編碼基本概念 FFMpeg的解碼流程

下面轉自http://topic.csdn.net/u/20081020/16/7156e0b2-dbfb-4b4f-af59-2be04cf9a420.html 的8樓 1、NAL、Slice與frame意思及相互關系 NAL指網絡提取層&#xff0c;里面放一些與網絡相關的信息Slice是片的意思&#xff0c;264中把圖像分成一幀&#xff08;frame&#xff09;…

谷歌瀏覽器開發調試工具中Sources面板 js調試等 完全介紹

這次分享的是Chrome開發工具中最有用的面板Sources。 Sources面板幾乎是我最常用到的Chrome功能面板&#xff0c;也是在我看來決解一般問題的主要功能面板。通常只要是開發遇到了js報錯或者其他代碼問題&#xff0c;在審視一遍自己的代碼而一無所獲之后&#xff0c;我首先就會打…

java XML解析防止外部實體注入

/** * 增加防止部實體注入邏輯* <功能詳細描述>* param reader* throws SAXException* see [類、類#方法、類#成員]*/public static void setReaderFeature(SAXReader reader)throws SAXException{reader.setFeature("http://apache.org/xml/features/disallow-doct…

【Python】最新Python學習路線(完整詳細版,含整套教程)

python目前應用最廣的三個崗位&#xff1a;全棧開發、數據分析、運維開發&#xff0c;今天我們就以這三個重點的崗位來做一下自學Python的規劃&#xff0c;希望你在學之前就能有明確的學習方向。 最近開始整理python的資料&#xff0c;博主建立了一個qq群&#xff0c;希望給大家…

程序員,軟件測試知多少?

送給初級程序員的測試認知文作為開發同學&#xff0c;一些基本的測試崗位相關知識還是很有必要了解一下&#xff0c;免的某些同學在工作中和測試同學斗嘴、打架、群毆等以及被測試鄙視....。 我們常常聽說的一些測試專業術語&#xff0c;比如白盒、黑盒、單元測試&#xff0c;相…