Docker基本概念
- 鏡像(Image)
- 容器(Container)
- 倉庫(Repository)
一揽乱、Docker鏡像
操作系統分為內核和用戶空間名眉。對于Linux而言,啟動后凰棉,會掛載root文件系統為其提供用戶空間支持损拢。而Docker鏡像就相當于一個root文件系統。
docker鏡像是一個特殊的文件系統撒犀,除了提供容器運行時所需的程序福压、庫掏秩、資源、配置等文件外荆姆,還包含了一些為運行時準備的一些配置參數(如匿名卷蒙幻、環(huán)境變量、用戶等)胞枕。鏡像不包含任何動態(tài)數據杆煞,其內容在構建之后也不會改變。
分層存儲
在docker設計時腐泻,就充分利用Union FS的技術决乎,將其設計為分層存儲的架構。嚴格來說派桩,鏡像并非是像一個ISO那樣的打包文件构诚,鏡像只是一個虛擬的概念,其實際體現并非由一個文件系統組成铆惑,或者說范嘱,由多層文件系統聯合組成。
鏡像構建時员魏,會一層層構建丑蛤,前一層是后一層的基礎。每一層構建玩就不會發(fā)生改變撕阎,后一層上的任何改變只發(fā)生在自己這一層受裹。比如,刪除前一層文件的操作實際不是真的刪除前一層的文件虏束,而是僅在當前層標記改文件已刪除棉饶。在最終容器運行的時候,雖然看不到這個文件镇匀,但是實際上該文件會一直跟隨鏡像照藻。因此在構建鏡像的時候,需要額外小心汗侵,每一層盡量僅包含該層需要添加的東西幸缕,任何額外的東西應該在該層構建結束前清理掉。
二晃择、Docker容器
容器(container)和鏡像(image)的關系冀值,就像是面向對象程序設計中的類和實例一樣,鏡像是靜態(tài)的定義宫屠,容器是鏡像運行時的實體。容器可以被創(chuàng)建滑蚯、啟動浪蹂、停止抵栈、刪除、暫停等坤次。
容器的是指是進程古劲,容器進程運行于屬于自己的獨立的命名空間。容器內的進程是運行在一個隔離的環(huán)境里缰猴,使用起來产艾,就好像是放在一個獨立于宿主的系統下操作一樣。
每一個容器運行時滑绒,是以鏡像為基礎層闷堡,在其上創(chuàng)建一個當前容器的存儲層,容器存儲層的生存周期和容器是一樣的疑故,因此任何保存于容器存儲層的信息都會隨容器刪除而丟失杠览。
按照Docker最佳實踐的要求,容器不應該向其存儲層內寫入任何數據纵势,容器存儲層要保持無狀態(tài)話踱阿。所有的文件寫入操作,都應該使用數據卷(Volume)钦铁、或者綁定宿主目錄软舌,在這些位置的讀寫會跳過容器存儲層,直接對宿主(或網絡存儲)發(fā)生讀寫牛曹,其性能和穩(wěn)定性更高佛点。
三、Docker倉庫
Docker Registry是一個集中的存儲躏仇、分發(fā)鏡像的服務恋脚。一個 Docker Registry 中可以包含多個 倉庫( Repository );每個倉庫可以包含多個 標簽( Tag )焰手;每個標簽對應一個鏡像糟描。通常,一個倉庫會包含同一個軟件不同版本的鏡像书妻,而標簽就常用于對應該軟件的各個版本船响。我們可以通過 <倉庫名>:<標簽> 的格式來指定具體是這個軟件哪個版本的鏡像。如果不給出標簽躲履,將以 latest 作為默認標簽见间。