Docker基本概念

基本概念

鏡像(Image)

  1. 操作系統(tǒng)分為內(nèi)核和用戶空間。
  2. 對Linux系統(tǒng)而言內(nèi)核啟動(dòng)后,會(huì)掛載root文件系統(tǒng)為其提供用戶空間支持。
  3. Image相當(dāng)于一個(gè)root文件系統(tǒng)。
  4. Docker鏡像是一個(gè)特殊的文件系統(tǒng),除提供容器運(yùn)行時(shí)所需程序、庫、資源、配置等文件外,還包括了一些為運(yùn)行時(shí)準(zhǔn)備的一些配置參數(shù)比如匿名卷、環(huán)境變量、用戶等。
  5. 不包括任何動(dòng)態(tài)數(shù)據(jù),其內(nèi)容在構(gòu)建之后也不會(huì)被改變。
分層存儲(chǔ)
  1. 因?yàn)殓R像包含操作系統(tǒng)完整的root文件系統(tǒng),其體積往往是龐大的,因此在docker設(shè)計(jì)之初,充分利用Union FS技術(shù),將其設(shè)計(jì)為分層存儲(chǔ)的架構(gòu),嚴(yán)格意義上來說,鏡像并非是一個(gè)像ISO那樣的打包文件,鏡像只是一個(gè)虛擬的概念,其實(shí)際體現(xiàn)并非由一個(gè)文件組成,而是由一組文件系統(tǒng)組成,或者說由多層文件系統(tǒng)聯(lián)合組成。
  2. 鏡像構(gòu)建時(shí),會(huì)一層層構(gòu)建,前一層是后一層的基礎(chǔ)。每一層構(gòu)建完就不會(huì)再發(fā)生改變,后一層上的任何改變只發(fā)生在自己這一層。比如刪除前一層文件的操作,實(shí)際不是真的刪除前一層的文件,而是僅在當(dāng)前層標(biāo)記為該文件已刪除。在最終容器運(yùn)行的時(shí)候,雖然不會(huì)看到這個(gè)文件,但是實(shí)際上該文件會(huì)一直跟隨鏡像。因此,在構(gòu)建鏡像的時(shí)候,需要額外小心,每一層盡量只包含改層需要添加的東西,任何額外的東西應(yīng)該在該層構(gòu)建結(jié)束前清理掉。
  3. 分層存儲(chǔ)的特性使得鏡像的復(fù)用,定制變的更為容易。甚至可以用之前構(gòu)建好的鏡像作為基礎(chǔ)層,然后進(jìn)一步添加新的層,以定制自己所需內(nèi)容,構(gòu)建新的鏡像。

容器(Container)

  1. 鏡像和容器的關(guān)系好比是面向?qū)ο蟪绦蛟O(shè)計(jì)中的類和實(shí)例一樣,鏡像是靜態(tài)的定義,容器是鏡像運(yùn)行時(shí)的實(shí)體。容器可以被創(chuàng)建、啟動(dòng)、停止、刪除、暫停等。
  2. 容器的實(shí)質(zhì)是進(jìn)程,但與直接在宿主執(zhí)行的進(jìn)程不同,容器進(jìn)程運(yùn)行于屬于自己的獨(dú)立的命名空間。因此容器可以擁有自己的root文件系統(tǒng)、自己的網(wǎng)絡(luò)配置、自己的進(jìn)程空間,甚至自己的用戶id空間。
  3. 容器內(nèi)的進(jìn)程是運(yùn)行在一個(gè)隔離的環(huán)境里,使用起來,就好像是一個(gè)獨(dú)立于宿主的系統(tǒng)下操作一樣。這種特性使得容器封裝的應(yīng)用比直接在宿主運(yùn)行更加安全。
  4. 鏡像使用的是分層存儲(chǔ),容器亦是如此。每一個(gè)容器運(yùn)行時(shí),是以鏡像為基礎(chǔ)層,在其上創(chuàng)建一個(gè)當(dāng)前容器的存儲(chǔ)層,可以稱這個(gè)為容器運(yùn)行時(shí)讀寫而準(zhǔn)備的存儲(chǔ)層為容器存儲(chǔ)層。
  5. 容器存儲(chǔ)層的生存周期和容器一樣,容器消亡時(shí),容器存儲(chǔ)層也隨之消亡,因此任何保存與容器的信息都會(huì)隨容器刪除而丟失。
  6. 按照docker最佳實(shí)踐的要求,容器不應(yīng)該想其存儲(chǔ)層內(nèi)寫入任何數(shù)據(jù),容器存儲(chǔ)層要保持無狀態(tài)化。所有的文件寫入操作,都應(yīng)該使用數(shù)據(jù)卷(Volume)、綁定宿主目錄,在這些位置的讀寫會(huì)跳過容器存儲(chǔ)層,直接對宿主(或網(wǎng)絡(luò)存儲(chǔ))發(fā)生讀寫,其性能和穩(wěn)定性更高。
  7. 數(shù)據(jù)卷的生存周期獨(dú)立于容器,容器消亡,數(shù)據(jù)卷不會(huì)消亡。因此,使用數(shù)據(jù)卷后,容器刪除或者重新運(yùn)行指揮,數(shù)據(jù)不會(huì)丟失。

倉庫(Reposition)

  1. 鏡像構(gòu)建完成后,可以在當(dāng)前宿主機(jī)上運(yùn)行。如果需要在其他服務(wù)器上使用這個(gè)鏡像,需要一個(gè)集中的存儲(chǔ)、分發(fā)鏡像的服務(wù),Docker Registry倉庫就是這樣的服務(wù)。
  2. 一個(gè)Docker Registry中可以包含多個(gè)倉庫(Repository)。
  3. 每個(gè)倉庫可以包含多個(gè)標(biāo)題(Tag)。
  4. 每個(gè)標(biāo)簽可以對應(yīng)一個(gè)鏡像。
  5. 通常一個(gè)倉庫會(huì)包含同一軟件不同版本的鏡像,而標(biāo)簽就常用于對應(yīng)該軟件的各個(gè)版本。
  6. 通過<倉庫名>:<標(biāo)簽>的格式來指定具體是這個(gè)軟件哪個(gè)版本的鏡像。如果不給出標(biāo)簽,將以ltest作為默認(rèn)標(biāo)簽。
  7. 倉庫名嘗嘗以兩段式路徑的形式出現(xiàn),比如jwilder/nginx-proxy,前者往往意味著Docker Registry多用戶環(huán)境下的用戶名,后者則往往是對應(yīng)的軟件名。但這并非絕對,取決于所使用的具體Docker Registry的軟件或服務(wù)。
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。
禁止轉(zhuǎn)載,如需轉(zhuǎn)載請通過簡信或評論聯(lián)系作者。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容