Docker鏡像與容器

Dockerfile是軟件的原材料,Docker鏡像是軟件的交付品,而Docker容器則可以認為是軟件的運行態。從應用軟件的角度來看,Dockerfile、Docker鏡像與Docker容器分別代表軟件的三個不同階段,Dockerfile面向開發,Docker鏡像成為交付標準,Docker容器則涉及部署與運維,三者缺一不可,合力充當Docker體系的基石。

Docker鏡像

Docker鏡像是Dockerfile的產物,是Docker容器的前提,大有承前啟后之意。Docker技術發展兩年有余,相信大家很早就聽說過Docker大多采用聯合文件系統
(Union Filesystem),為Docker容器提供文件系統服務。
關于Docker鏡像,有以下特性:

  • 由Dockerfile生成
  • 呈現層級結構
  • 每層鏡像包含:鏡像文件以及鏡像json元數據信息
Docker容器

Docker容器是Docker鏡像的運行態體現。概括而言,就是在Docker鏡像之上,運行進程。進程啟動的方式有兩種,用戶即可以選擇運行自己另行指定的命令,也可以選擇運行Docker鏡像內部指定的命令。
Docker容器的文件系統,可以說大部分由Docker鏡像來提供。為什么說是大部分呢?其實是有原因的,鏡像內容雖多,但依然不是全部。

Docker容器文件系統

那就讓我們一圖看盡Docker容器的文件系統:


技術分享

上圖從一個較為全面的角度闡述了Dockerfile、Docker鏡像與Docker容器三者的關系。
Dockerfile體現Docker容器已經在運行,但是追本溯源,我們依然可以找到Dockerfile的影子。上圖中,我們可以發現,Docker容器依附Docker鏡像,而Docker鏡像的Dockerfile是這樣的:

FROM ubuntu:14.04
ADD run.sh 
VOLUME /data
CMD ["./run.sh"]

我們可以看到,以上Dockerfile中的每一條命令,都在Docker鏡像中以一個獨立鏡像層的形式存在。
毫無疑問,Docker鏡像是由Dockerfile構建而成,我們也可以看到圖中下4層被標記為Docker鏡像。作為Docker技術的核心,我們必須了解Docker如何構建鏡像,以及Docker鏡像構建之后的產物是什么。
初次接觸Docker,了解層級管理的Docker鏡像之后,很容易就認為:每一層Docker鏡像中都含有相應的文件系統文件。其實不然,以上Dockerfile中的4條命令,則是一個很好的佐證。

FROM ubuntu:14.04
:設置基礎鏡像,此時會使用基礎鏡像ubuntu:14.04的所有鏡像層,為簡單起見,圖中將其作為一個整體展示。

ADD run.sh /
:將Dockerfile所在目錄的文件run.sh加至鏡像的根目錄,此時新一層的鏡像只有一項內容,即根目錄下的run.sh.

VOLUME /data
:設定鏡像的VOLUME,此VOLUME在容器內部的路徑為/data。需要注意的是,此時并未在新一層的鏡像中添加任何文件,但更新了鏡像的json文件,以便通過此鏡像啟動容器時獲取這方面的信息。

CMD ["./run.sh"]
:設置鏡像的默認執行入口,此命令同樣不會在新建鏡像中添加任何文件,僅僅在上一層鏡像json文件的基礎上更新新建鏡像的json文件。

Docker容器體現涉及到Docker容器,便是動態的內容,一切似乎都有了生命。上文曾提及,Docker容器的文件系統中不僅包含Docker鏡像。此言不虛,圖中的頂上兩層,就是Docker為Docker容器新建的內容,而這兩層恰恰不屬于鏡像范疇。

這兩層分別為Docker容器的初始層(Init Layer)與可讀寫層(Read-Write Layer),初始層中大多是初始化容器環境時,與容器相關的環境信息,如容器主機名,主機host信息以及域名服務文件等。

再來看可讀寫層,這一層的作用非常大,Docker的鏡像層以及頂上的兩層加起來,Docker容器內的進程只對可讀寫層擁有寫權限,其他層對進程而言都是只讀的(Read-Only)。如AUFS等文件系統下,寫下層鏡像內容即會涉及COW(Copy-on-Write)技術。另外,關于VOLUME以及容器的hosts、hostname、resolv.conf文件等都會掛載到這里。需要額外注意的是:雖然Docker容器有能力在可讀寫層看到VOLUME以及hosts文件等內容,但那都僅僅是掛載點,真實內容位于宿主機上。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 228,119評論 6 531
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 98,382評論 3 415
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 176,038評論 0 373
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 62,853評論 1 309
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,616評論 6 408
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,112評論 1 323
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,192評論 3 441
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,355評論 0 288
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 48,869評論 1 334
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,727評論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 42,928評論 1 369
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,467評論 5 358
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,165評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,570評論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,813評論 1 282
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,585評論 3 390
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 47,892評論 2 372

推薦閱讀更多精彩內容