Docker Client 客戶端 / Docker Daemon 守護(hù)進(jìn)程
docker是CS架構(gòu)嵌施,Docker Daemon守護(hù)進(jìn)程即為服務(wù)端
客戶端向守護(hù)進(jìn)程發(fā)起請(qǐng)求吗伤,既可以在本地也可以在遠(yuǎn)程
Docker Image 鏡像
鏡像是容器的基石,就像容器的源代碼巧号,保存了用于啟動(dòng)容器的各項(xiàng)條件和配置
docker的鏡像是一個(gè)層疊的只讀文件系統(tǒng)丹鸿,最底端是一個(gè)引導(dǎo)文件系統(tǒng)(bootfs)卜高,這很像典型的linux的引導(dǎo)文件系統(tǒng),docker用戶幾乎永遠(yuǎn)不會(huì)和引導(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),root文件系統(tǒng)可以是一種或者多種操作系統(tǒng)拧粪,比如ubuntu或者centos可霎,在傳統(tǒng)的文件系統(tǒng)中癣朗,root文件系統(tǒng)會(huì)最先以只讀的方式加載旷余,當(dāng)引導(dǎo)結(jié)束并完成完整性檢查之后它才會(huì)被切換到讀寫(xiě)模式荣暮。但是在docker中,rootfs永遠(yuǎn)是只讀狀態(tài)砾跃。 并且docker利用聯(lián)合加載技術(shù)(union mount)又會(huì)在rootfs之上加載更多的只讀文件系統(tǒng)抽高。聯(lián)合加載指的是一次同時(shí)加載多個(gè)文件系統(tǒng)翘骂,但是在外面看起來(lái)只能看到一個(gè)文件系統(tǒng)碳竟,聯(lián)合加載會(huì)將各層文件系統(tǒng)疊加在一起莹桅,這樣最終的文件系統(tǒng)會(huì)包含所有的底層文件和目錄懂拾,docker將這樣的文件系統(tǒng)稱為鏡像铐达。
Docker Container 容器
容器通過(guò)鏡像來(lái)啟動(dòng)唐断,容器是鏡像的執(zhí)行單元栗涂,如果說(shuō)鏡像是docker生命周期中的構(gòu)建和打包階段,那么容器則是啟動(dòng)和執(zhí)行階段忿墅。當(dāng)一個(gè)容器啟動(dòng)時(shí)疚脐,docker會(huì)在該鏡像的最頂層加載一個(gè)可寫(xiě)的文件層棍弄,我們?cè)赿ocker中運(yùn)行的程序就是在這個(gè)層中執(zhí)行的。docker第一次啟動(dòng)一個(gè)容器時(shí)蛮原,初始的讀寫(xiě)層是空的儒陨,當(dāng)文件系統(tǒng)發(fā)生變化時(shí),這些變化都會(huì)應(yīng)用在這一層上津辩。比如如果想修改一個(gè)文件喘沿,這個(gè)文件首先會(huì)從該讀寫(xiě)層下面的只讀層復(fù)制到該讀寫(xiě)層,該文件的只讀版本依然存在留量,但是已經(jīng)被讀寫(xiě)層中的該文件副本所隱藏忆绰,這就是docker中的一個(gè)重要技術(shù)寫(xiě)時(shí)復(fù)制(copy on write).
每個(gè)只讀鏡像層都是只讀的错敢,并且以后永遠(yuǎn)不會(huì)變化稚茅,當(dāng)創(chuàng)建一個(gè)新容器時(shí)docker會(huì)構(gòu)建出一個(gè)鏡像棧,在棧的最頂層添加可寫(xiě)層欺税,這個(gè)可寫(xiě)層加上下面的鏡像層以及一些配置數(shù)據(jù)就構(gòu)成了一個(gè)容器晚凿。容器的這些特點(diǎn)加上鏡像的分層框架使我們可以快速構(gòu)建鏡像,并允許包含我們自己應(yīng)用程序的容器哲银。
Docker Registry倉(cāng)庫(kù)
docker用倉(cāng)庫(kù)保存用戶構(gòu)建的鏡像,倉(cāng)庫(kù)分為公有和私有兩種,docker Hub是docker官方的公有倉(cāng)庫(kù)键耕。我們可以通過(guò)這個(gè)網(wǎng)站查找我們需要的鏡像為我們節(jié)省構(gòu)建鏡像的時(shí)間村视。