Docker鏡像和Docker容器的關(guān)系?
毫無疑問,Docker成了近些年來火熱,甚至具有顛覆性的技術(shù)之一。國際上,所有泛云計算相關(guān)的公司,幾乎都在某種程度上宣布支持并集成Docker。在2014年6月的DockerCon中,很多公司都分享了他們自己如何和Docker集成的故事。
1.什么是Docker鏡像
A:從整體的角度來講,一個完整的Docker鏡像可以支撐一個Docker容器的運(yùn)行,在 Docker容器運(yùn)行過程中主要提供文件系統(tǒng)視角。例如一個ubuntu:14.04的鏡像,提供了一個基本的ubuntu:14.04的發(fā)行版,當(dāng)然此 鏡像是不包含操作系統(tǒng)Linux內(nèi)核的。
以上內(nèi)容是從宏觀的角度看看Docker鏡像是什么,我們再從微觀的角度進(jìn)一步深入 Docker鏡像。剛才提到了“Debian鏡像中安裝MySQL 5.6,就成了mysql:5.6鏡像”,其實在此時Docker鏡像的層級概念就體現(xiàn)出來了。底層一個Debian操作系統(tǒng)鏡像,上面疊加一個 mysql層,就完成了一個mysql鏡像的構(gòu)建。層級概念就不難理解,此時我們一般debian操作系統(tǒng)鏡像稱為mysql鏡像層的父鏡像。
Docker有兩方面的技術(shù)非常重要,***是Linux 容器方面的技術(shù),第二是Docker鏡像的技術(shù)。從技術(shù)本身來講,兩者的可復(fù)制性很強(qiáng),不存在絕對的技術(shù)難點,然而Docker Hub由于存在大量的數(shù)據(jù)的原因,導(dǎo)致Docker Hub的可復(fù)制性幾乎不存在,這需要一個生態(tài)的營造。
2.Docker鏡像的內(nèi)容
介紹之前,我先分享一下,我個人在接觸Docker的兩年時間中,對Docker鏡像內(nèi)容認(rèn)識的變化。
***階段:初步接觸Docker。相信很多愛好者都會和我一樣,有這樣一個認(rèn)識:Docker 鏡像代表一個容器的文件系統(tǒng)內(nèi)容;
第二階段:初步接觸聯(lián)合文件系統(tǒng)。聯(lián)合文件系統(tǒng)的概念,讓我意識到鏡像層級管理的技術(shù),每一層鏡像都是容器文件系統(tǒng)內(nèi)容的一部分。
第三階段:研究鏡像與容器的關(guān)系:容器是一個動態(tài)的環(huán)境,每一層鏡像中的文件屬于靜態(tài)內(nèi) 容,然而 Dockerfile 中的 ENV、VOLUME、CMD 等內(nèi)容最終都需要落實到容器的運(yùn)行環(huán)境中,而這些內(nèi)容均不可能直接坐落到每一層鏡像所包含的文件系統(tǒng)內(nèi)容中,那此時每一個Docker鏡像還會包含 json文件記錄與容器之間的關(guān)系。
因此,Docker鏡像的內(nèi)容主要包含兩個部分:***,鏡像層文件內(nèi)容;第二,鏡像json文件。
3.Dockerfile、Docker鏡像和Docker容器的關(guān)系
Dockerfile 是軟件的原材料,Docker 鏡像是軟件的交付品,而 Docker 容器則可以認(rèn)為是軟件的運(yùn)行態(tài)。從應(yīng)用軟件的角度來看,Dockerfile、Docker 鏡像與 Docker 容器分別代表軟件的三個不同階段,Dockerfile 面向開發(fā),Docker 鏡像成為交付標(biāo)準(zhǔn),Docker 容器則涉及部署與運(yùn)維,三者缺一不可,合力充當(dāng) Docker 體系的基石。
簡單來講,Dockerfile構(gòu)建出Docker鏡像,通過Docker鏡像運(yùn)行Docker容器。
4.為什么一個ubuntu:14.04鏡像的鏡像層的數(shù)量是4個,前三層的內(nèi)容似乎有相同的,如etc?
雖然三層 都有,但是會存在兩種情況,etc的子目錄下有相同路徑的文件,那么上層的會覆蓋下層的文件;如果內(nèi)部的文件路徑不相同,那么都會存在,都會呈現(xiàn)給最上層。
5.如何保證僅有的一個deamon的穩(wěn)定性健壯性?
分布式系統(tǒng)需要大量機(jī)器協(xié)作,面臨諸多的挑戰(zhàn):
***,異構(gòu)的機(jī)器與網(wǎng)絡(luò):
分布式系統(tǒng)中的機(jī)器,配置不一樣,其上運(yùn)行的服務(wù)也可能由不同的語言、架構(gòu)實現(xiàn),因此處理能力也不一樣;節(jié)點間通過網(wǎng)絡(luò)連接,而不同網(wǎng)絡(luò)運(yùn)營商提供的網(wǎng)絡(luò)的帶寬、延時、丟包率又不一樣。怎么保證大家齊頭并進(jìn),共同完成目標(biāo),這四個不小的挑戰(zhàn)。
第二,普遍的節(jié)點故障:
雖然單個節(jié)點的故障概率較這個問題首先需要知道docker daemon的穩(wěn)定性在哪些方面,那種場景下比較差?的確,docker daemon存在弊病。比如,daemon和容器的耦合等,目前general來講,docker daemon保證絕對的穩(wěn)定應(yīng)該還做不到。