摘要:包含的內容本系列主要介紹三個上的項目由于只介紹核心的東西,所以不會包含下面這些項目使用語言開發,將多個相關的容器配置在一起,從而可以同時創建啟動停止和監控它們。由于本人時間安排發生變化,本系列停止更新,后面不確定是否會繼續,非常抱歉。
本人docker初學者,邊學習邊總結,一方面加深自己的理解,另一方面希望對其他想深入了解docker的同學有所幫助。
由于本人缺乏實戰經驗,錯誤在所難免,歡迎批評指正,謝謝。
包含的內容本系列主要介紹三個github上的項目: moby、containerd、runc.
由于只介紹docker核心的東西,所以不會包含下面這些項目:
compose:使用Python語言開發,將多個相關的容器配置在一起,從而可以同時創建、啟動、停止和監控它們。
machine:幫助安裝docker到指定位置,包括本地虛擬機、遠端云主機等,同時還管理這些主機的信息,可以很方便的操作安裝在不同主機上的這些docker。
kitematic:桌面版的docker客戶端(圖形界面),使用JavaScript基于electron開發。
toolbox:幫助安裝docker環境到Windows和Mac平臺,包括Docker引擎、Compose、 Machine和 Kitematic,當然docker引擎是安裝在虛擬機里面的,本地只有客戶端,使用哪個虛擬機依賴于平臺,toolbox會幫你搞定這一切。
distribution:Registry 2.0的實現,主要是管理和分發docker鏡像,Docker Hub背后的技術。
swarmkit:嵌入在docker里面的容器編排系統,可以簡單的把它和docker的關系理解成IE瀏覽器和Windows的關系,捆綁銷售。
面向讀者本系列主要專注docker背后的技術和實現思路,不介紹怎么使用docker,不介紹代碼細節。
如果你是docker初學者,想了解怎么使用docker,那么本系列不適合你。
如果你已經熟悉了基本的操作,想了解下高級點的參數,或者想了解背后到底發生了什么,便于自己更好的使用docker,更好的解決碰到的問題,那么本系列適合你。
如果你是一名開發人員,想了解docker的代碼實現細節,但又不知道從何處下手,本系列也許會給你一些啟發。
docker版本自從docker決定將swarm整合進來弄企業版之后,代碼一直在調整,docker的一些目錄和程序名稱也在發生變化,所以本系列的內容沒法覆蓋所有docker版本,只能挑其中的一個。
自v17.03開始,docker采用了新的發行方式,版本的發行周期變成了一個月一次,并且也分了企業版和社區版,在本系列中,將以v17.03社區版作為參考,建議大家閱讀本系列時,手頭的docker版本不低于v17.03。
docker完整的變更列表請參考這里。
docker和moby的關系2017-04-18,在DockerCon 2017上,docker公司正式宣布成立moby項目,同時將github上的docker/docker項目重命名成了moby/moby,雖然會自動重定向,但代碼里的相關引用不排除會有問題,需要留意。
這里不評價這次變化,對普通使用者來說,不會發生任何變化,還是熟悉的命令,熟悉的參數,對開發人員來說,代碼的位置變了,但代碼還是那份代碼。
以后moby會變成什么樣,現在還不清楚,有可能和docker的關系會變成blink和chrome的關系一樣,靜觀其變,希望不要影響我們學習。
文章列表注意:若沒有特別說明,本系列提到的docker源碼,都指的是moby的代碼
該系列的所有文章都會列在這里,便于大家選擇閱讀。由于本人時間安排發生變化,本系列停止更新,后面不確定是否會繼續,非常抱歉。
走進docker(01):hello-world的背后發生了什么?
走進docker(02):image(鏡像)是什么?
走進docker(03):如何繞過docker運行hello-world?
走進docker(04):什么是容器的runtime?
走進docker(05):docker在本地如何管理image(鏡像)?
走進docker(06):docker create命令背后發生了什么?
走進docker(07):docker start命令背后發生了什么?
建議閱讀在閱讀本系列之前,如果對Linux不是很熟的話,建議先閱讀本人的Linux程序員專欄,里面包含了內存、CPU、文件系統、網絡、namespace、cgroup等方面的詳細內容,和docker相關的Linux知識還在更新中,敬請關注。
獲取docker相關的代碼由于現在docker依賴的containerd和runc是github上兩個多帶帶的項目,如果你需要分析docker的代碼,請確保containerd和runc的版本和docker的版本是一致的,檢查辦法如下:
#假設我們已經將docker的源代碼clone到了/home/dev/repos/docker目錄下 dev@debian:~/repos/docker$ git branch * master #列出17.03相關的tag dev@debian:~/repos/docker$ git tag|grep 17.03 v17.03.0-ce v17.03.0-ce-rc1 v17.03.1-ce v17.03.1-ce-rc1 #取最新的v17.03.1-ce dev@debian:~/repos/docker$ git checkout -b v17.03.1-ce v17.03.1-ce Switched to a new branch "v17.03.1-ce" dev@debian:~/repos/docker$ git branch master * v17.03.1-ce #查看docker所用的runc和containerd的commit id dev@debian:~/repos/docker$ egrep "RUNC_COMMIT|CONTAINERD_COMMIT" ./hack/dockerfile/binaries-commits # When updating RUNC_COMMIT, also update runc in vendor.conf accordingly RUNC_COMMIT=54296cf40ad8143b62dbcaa1d90e520a2136ddfe CONTAINERD_COMMIT=4ab9917febca54791c5f071a9d1f404867857fcc #查看runc和containerd的庫路徑 dev@debian:~/repos/docker$ egrep "runc.git|containerd.git" ./hack/dockerfile/install-binaries.sh git clone https://github.com/docker/runc.git "$GOPATH/src/github.com/opencontainers/runc" git clone https://github.com/docker/containerd.git "$GOPATH/src/github.com/docker/containerd"
根據上面的結果,先將runc和containerd克隆下來,然后checkout相應的commit id,這樣就可以配合docker的代碼一起看了。這里是上面例子中找到的containerd和runc的信息:
containerd: https://github.com/docker/con... 4ab9917febca54791c5f071a9d1f404867857fcc
runc: https://github.com/docker/run... 54296cf40ad8143b62dbcaa1d90e520a2136ddfe
注意:
可能是為了方便對runc進行修改,docker將github.com/opencontainers/runc克隆到了github.com/docker/runc,在docker v17.03里面,runc是從github.com/docker/runc.git拉的代碼,然后放在本地的opencontainers/runc目錄下,假裝是opencontainers的runc,這個需要留意,別pull了錯誤的庫。
上面顯示containerd的地址是https://github.com/docker/con...,這個沒有關系,github已經將這個地址重定向到了https://github.com/containerd...
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/26901.html
摘要:圖表君聊開篇今天是圖表君聊的第一篇,為什么會有這個系列呢容器技術出現已經有一段時間了,之前零零星星的也看過一些文章,圖表君的項目上也在使用。至于,圖表君沒試過,官網有的教程,大家可以參考。上的官網,安裝,然后跟著圖表君一起學習吧。 圖表君聊Docker-開篇 今天是圖表君聊Docker的第一篇,為什么會有這個系列呢?容器技術Docker出現已經有一段時間了,之前零零星星的也看過一些文章...
摘要:方案匯總一開源方案采集展示報警二商業方案三云廠商騰訊云阿里云百度云華為云四主機監控五日志監控六服務監控七存儲后端腦圖本文為容器監控實踐系列文章,完整內容見 概述 隨著越來越多的線上服務docker化,對容器的監控、報警變得越來越重要,容器監控有多種形態,有些是開源的(如promethues),而另一些則是商業性質的(如Weave),有些是集成在云廠商一鍵部署的(Rancher、谷歌云)...
摘要:用作為我們開發大禮包開篇是帶著一些朝圣的心情的。最著名的版本發布于年月日,距今正好第十一個年頭。在年全面采用運行,間接拉升了生態的逼格,激發了整個群體的活力。但這也間接養成了開發重功能輕工程的通病,加上部署的隨意性,上規模后運維虐成狗。 showImg(http://7xi8kv.com5.z0.glb.qiniucdn.com/php.jpg); 用 PHP 作為我們「Docker...
閱讀 2428·2021-11-25 09:43
閱讀 1203·2021-09-07 10:16
閱讀 2623·2021-08-20 09:38
閱讀 2947·2019-08-30 15:55
閱讀 1467·2019-08-30 13:21
閱讀 897·2019-08-29 15:37
閱讀 1450·2019-08-27 10:56
閱讀 2099·2019-08-26 13:45