原文位址:http://blog.jboost.cn/2019/07/14/docker-2.html
在Docker筆記(一):什麼是Docker中,我們提到了Docker管理的對象包含鏡像、容器、網絡、資料卷等,本文就來介紹下這些對象及用途。
1. 鏡像
所謂鏡像,是一個靜态的概念。它對我們期望幹的事情做了一些定義,比如要運作什麼程式,需要哪些依賴,需要什麼樣的配置,需要開放哪個網絡端口等等。
Docker的鏡像是一個特殊的檔案系統,提供了運作時需要的程式、庫、資源、配置等檔案,還包含一些為運作時準備的配置參數(如環境變量、匿名資料卷、使用者等),鏡像不包含任何動态資料,其内容在建構之後也不會被改變。
鏡像的檔案系統有一個分層存儲的概念,采用的是Union FS技術,是以,鏡像并不是簡單地由一組檔案組成,而是由多層檔案系統疊加聯合組成。如下圖所示
鏡像建構時,會一層一層地建構,前一層是後一層的基礎,每層建構完後就變成隻讀的,不會再發生改變。鏡像分層存儲的一大好處是複用,鏡像的每一層可以在不同鏡像間複用,這就好比我們開發項目時将一些公共功能封裝成jar包,在各個項目可以直接依賴使用一樣。關于鏡像的更多内容,在後續使用時再詳述。
2. 容器
相對鏡像,容器是一個動态的運作時的概念,它與鏡像的關系類似于面向對象中類與執行個體的關系。容器可以被建立、啟動、停止、删除等。容器運作實質上就是運作一個程序,但與那些直接在主控端上運作的程序不同,容器運作在自己的獨立的隔離的命名空間中——擁有自己的root檔案系統、網絡配置、程序空間,甚至自己的使用者ID空間,是以雖然是以程序的形式運作,但好像是運作在一個獨立的系統中一樣,這樣相比直接運作于主控端的程序,容器的運作顯得更為安全。
前面說到鏡像的分層存儲概念,對于容器來說,實際上也是以鏡像作為基礎層,在其上建立了一個目前容器的存儲層,如下圖
以鏡像ubuntu:15.04為基礎層所建立的容器,都有一個自己的可讀寫的存儲層(鏡像的存儲層是隻讀的)。容器存儲層的生命周期與容器一樣,容器銷毀時,容器的存儲層也會随之消亡,任何儲存在容器存儲層的資料也都會随容器的删除而丢失,是以一般我們要保持容器存儲層的無狀态化,所有檔案的寫操作,都應該使用資料卷或綁定主控端目錄。
3. 資料卷
資料卷是一個獨立于容器,可供一個或多個容器使用的特殊目錄,它繞過了Union FS,不會随容器的銷毀而消亡。這好比我們在阿裡雲上建虛機,再加載一個資料盤一樣,一般産生的資料都要儲存在資料盤,而不是虛機的系統盤。
資料卷具備如下特性:
- 可以在容器之間共享和重用
- 對資料卷的修改會立馬生效
- 資料卷的更新,不會影響到鏡像
- 資料卷預設會一直存在,不會随容器的删除而消亡
4. 網絡
Docker容器是如何與外部進行網絡通信的?一般來說,我們在運作容器時,隻需要指定容器服務端口與主控端端口的映射,就可以通過主控端IP與映射的端口通路容器服務了,因為Docker預設使用了Bridge的模式來實作容器與外部的通信。
Docker的網絡子系統通過使用一些驅動程式,是可插拔式的,預設提供了如下幾種驅動:
- bridge:預設的網絡驅動。運作在容器中的應用程式一般是通過網橋與外部進行通信。
- host:容器直接使用主控端的網絡通信。host隻在基于Docker 17.06或以上版本的Swarm服務中可用
- overlay:overlay可将多個Docker daemon程序連接配接起來使得Swarm服務之間能互相通信,也可以将overlay用于Swarm服務與容器之間,或運作在不同Docker daemon上的容器之間的通信,不需要作業系統層面的路由配置。
- macvlan:macvlan允許你配置設定一個mac位址給容器,讓它像一台實體裝置一樣加入你的網絡中。Docker daemon通過mac位址将請求路由給容器,适用于那些希望直接連到實體網絡的遺留應用。
- none:禁用所有網絡。一般與一個自定義的網絡驅動一起使用。none不能用于Swarm服務。
- 其它第三方網絡插件:可從Docker Hub或其它第三方供應商擷取安裝。
總之,bridge适用于在同一台主控端運作多個容器的場景;host适用于不應與主控端進行網絡隔離的場景;overlay适用于運作在不同主控端上的容器間通信,或多個應用通過Swarm服務來共同協作的場景;macvlan适用于從虛拟機遷移配置或希望容器作為實體機一樣使用網絡的場景。
5. 總結
本文對Docker所管理的幾個基本對象——鏡像、容器、資料卷、網絡做了簡單介紹,這是認識或學習Docker的基礎,在後續實踐操作過程中,将會對各部分進行更詳細的使用說明,歡迎持續關注。
我的個人部落格位址:http://blog.jboost.cn
我的微信公衆号:jboost-ksxy (一個不隻有技術幹貨的公衆号,歡迎關注,及時擷取更新内容)
———————————————————————————————————————————————————————————————