Docker通過客戶端訪問守護(hù)進(jìn)程,從而操作Docker容器,而容器是通過鏡像創(chuàng)建的纽甘,Docker鏡像保存在Docker倉庫中。
一抽碌、Docker客戶端和守護(hù)進(jìn)程
Docker客戶端向Docker守護(hù)進(jìn)程發(fā)送請(qǐng)求悍赢,Docker守護(hù)進(jìn)程處理完所有請(qǐng)求并返回結(jié)果。Docker對(duì)守護(hù)進(jìn)程的訪問既可以在本地货徙,也可以是遠(yuǎn)程訪問左权。如圖所示,通過Docker客戶端執(zhí)行各種命令痴颊,然后Docker客戶端會(huì)將這些命令發(fā)送給守護(hù)進(jìn)程赏迟,守護(hù)進(jìn)程執(zhí)行的結(jié)果會(huì)傳送給客戶端。
二蠢棱、Docker鏡像
鏡像是Docker容器的基石瀑梗,容器基于鏡像啟動(dòng)和運(yùn)行,鏡像可以看做容器的源代碼裳扯,保存了用于啟動(dòng)容器的各種條件。Docker鏡像是一個(gè)層疊的只讀文件系統(tǒng)谤职,最底層是一個(gè)引導(dǎo)文件系統(tǒng)bootfs饰豺,Docker用戶很少與引導(dǎo)文件系統(tǒng)有交互。實(shí)際上當(dāng)一個(gè)容器啟動(dòng)后允蜈,將會(huì)被移動(dòng)到內(nèi)存中冤吨,而引導(dǎo)文件系統(tǒng)則會(huì)被卸載。Docker文件的第二層是root文件系統(tǒng)rootfs饶套,位于引導(dǎo)文件系統(tǒng)之上漩蟆,root文件系統(tǒng)可以是一種或多種的操作系統(tǒng),比如CentOS妓蛮、Ubuntu等怠李。
在傳統(tǒng)的Linux引導(dǎo)過程中,root文件系統(tǒng)會(huì)最先以只讀形式加載蛤克,當(dāng)引導(dǎo)結(jié)束并完成了完整性檢查后才會(huì)被切換為讀寫模式捺癞。但Docker中root文件系統(tǒng)永遠(yuǎn)只能是只讀狀態(tài),并且Docker利用聯(lián)合加載技術(shù)(union mount)又會(huì)在root文件系統(tǒng)之上加載更多的只讀文件系統(tǒng)构挤,聯(lián)合加載是指一次加載多個(gè)文件系統(tǒng)髓介,但在外面看起來只能看到一個(gè)文件系統(tǒng),聯(lián)合加載會(huì)將各層文件系統(tǒng)疊加在一起筋现,最終文件系統(tǒng)會(huì)包括底層文件和目錄唐础,Docker將這樣的文件系統(tǒng)稱為鏡像箱歧。一個(gè)鏡像可以放到另一個(gè)鏡像頂部,位于下面的鏡像稱為父鏡像一膨,最底部的鏡像稱為基礎(chǔ)鏡像呀邢,也即是上面所說的rootfs。
三汞幢、Docker容器
Docker容器通過鏡像啟動(dòng)驼鹅,容器是Docker的執(zhí)行單元,容器中可以運(yùn)行客戶的多個(gè)進(jìn)程森篷。如果說鏡像是Docker生命周期的構(gòu)建和打包階段输钩,那么容器則是啟動(dòng)和執(zhí)行階段。那么容器是怎么通過鏡像啟動(dòng)的仲智?如圖Docker鏡像的結(jié)構(gòu)买乃,當(dāng)一個(gè)容器啟動(dòng)時(shí)Docker會(huì)在該鏡像的最頂層加載一個(gè)讀寫文件系統(tǒng)(可寫文件層),Docker中運(yùn)行的程序就是在讀寫層中執(zhí)行的钓辆,當(dāng)Docker第一次啟動(dòng)一個(gè)容器時(shí)初始的讀寫層是空的剪验。當(dāng)文件系統(tǒng)發(fā)生變化時(shí),這些變化都會(huì)應(yīng)用到這層上前联。比如修改文件功戚,會(huì)首先將下面層的文件復(fù)制到讀寫層,該文件的只讀版本依然存在似嗤,只不過被讀寫層中的副本所隱藏啸臀,這就是Docker中另一個(gè)重要技術(shù)寫時(shí)復(fù)制(copy on write)。每個(gè)只讀鏡像層永遠(yuǎn)是只讀的烁落,當(dāng)創(chuàng)建一個(gè)新容器時(shí)乘粒,Docker會(huì)構(gòu)造出一個(gè)鏡像棧,在棧最定層添加讀寫層伤塌,讀寫層灯萍、鏡像層及一些配置數(shù)據(jù)就組成了一個(gè)容器。
四每聪、Docker倉庫
Docker用倉庫保存用戶創(chuàng)建的鏡像旦棉,倉庫分共有和私有兩種,Docker公司自己提供了倉庫Docker Hub药薯,可以在Docker Hub上創(chuàng)建賬戶他爸,保存分享自己創(chuàng)建的鏡像。當(dāng)然也可以架設(shè)私有倉庫果善。