Docker筆記(二):Docker管理的對象


原文地址:http://blog.jboost.cn/docker-2.html

 

Docker筆記(一):什么是Docker中,我們提到了Docker管理的對象包含鏡像、容器、網絡、數據卷等,本文就來介紹下這些對象及用途。

1. 鏡像

所謂鏡像,是一個靜態的概念。它對我們期望干的事情做了一些定義,比如要運行什么程序,需要哪些依賴,需要什么樣的配置,需要開放哪個網絡端口等等。
Docker的鏡像是一個特殊的文件系統,提供了運行時需要的程序、庫、資源、配置等文件,還包含一些為運行時准備的配置參數(如環境變量、匿名數據卷、用戶等),鏡像不包含任何動態數據,其內容在構建之后也不會被改變。
鏡像的文件系統有一個分層存儲的概念,采用的是Union FS技術,因此,鏡像並不是簡單地由一組文件組成,而是由多層文件系統疊加聯合組成。如下圖所示
container-layers

鏡像構建時,會一層一層地構建,前一層是后一層的基礎,每層構建完后就變成只讀的,不會再發生改變。鏡像分層存儲的一大好處是復用,鏡像的每一層可以在不同鏡像間復用,這就好比我們開發項目時將一些公共功能封裝成jar包,在各個項目可以直接依賴使用一樣。關於鏡像的更多內容,在后續使用時再詳述。

2. 容器

相對鏡像,容器是一個動態的運行時的概念,它與鏡像的關系類似於面向對象中類與實例的關系。容器可以被創建、啟動、停止、刪除等。容器運行實質上就是運行一個進程,但與那些直接在宿主機上運行的進程不同,容器運行在自己的獨立的隔離的命名空間中——擁有自己的root文件系統、網絡配置、進程空間,甚至自己的用戶ID空間,因此雖然是以進程的形式運行,但好像是運行在一個獨立的系統中一樣,這樣相比直接運行於宿主機的進程,容器的運行顯得更為安全。
前面說到鏡像的分層存儲概念,對於容器來說,實際上也是以鏡像作為基礎層,在其上創建了一個當前容器的存儲層,如下圖
sharing-layers.jpg

以鏡像ubuntu:15.04為基礎層所創建的容器,都有一個自己的可讀寫的存儲層(鏡像的存儲層是只讀的)。容器存儲層的生命周期與容器一樣,容器銷毀時,容器的存儲層也會隨之消亡,任何保存在容器存儲層的數據也都會隨容器的刪除而丟失,因此一般我們要保持容器存儲層的無狀態化,所有文件的寫操作,都應該使用數據卷或綁定宿主機目錄。

3. 數據卷

數據卷是一個獨立於容器,可供一個或多個容器使用的特殊目錄,它繞過了Union FS,不會隨容器的銷毀而消亡。這好比我們在阿里雲上建虛機,再加載一個數據盤一樣,一般產生的數據都要保存在數據盤,而不是虛機的系統盤。
數據卷具備如下特性:

  1. 可以在容器之間共享和重用
  2. 對數據卷的修改會立馬生效
  3. 數據卷的更新,不會影響到鏡像
  4. 數據卷默認會一直存在,不會隨容器的刪除而消亡

4. 網絡

Docker容器是如何與外部進行網絡通信的?一般來說,我們在運行容器時,只需要指定容器服務端口與宿主機端口的映射,就可以通過宿主機IP與映射的端口訪問容器服務了,因為Docker默認使用了Bridge的模式來實現容器與外部的通信。
Docker的網絡子系統通過使用一些驅動程序,是可插拔式的,默認提供了如下幾種驅動:

  1. bridge:默認的網絡驅動。運行在容器中的應用程序一般是通過網橋與外部進行通信。
  2. host:容器直接使用宿主機的網絡通信。host只在基於Docker 17.06或以上版本的Swarm服務中可用
  3. overlay:overlay可將多個Docker daemon進程連接起來使得Swarm服務之間能相互通信,也可以將overlay用於Swarm服務與容器之間,或運行在不同Docker daemon上的容器之間的通信,不需要操作系統層面的路由配置。
  4. macvlan:macvlan允許你分配一個mac地址給容器,讓它像一台物理設備一樣加入你的網絡中。Docker daemon通過mac地址將請求路由給容器,適用於那些希望直接連到物理網絡的遺留應用。
  5. none:禁用所有網絡。一般與一個自定義的網絡驅動一起使用。none不能用於Swarm服務。
  6. 其它第三方網絡插件:可從Docker Hub或其它第三方供應商獲取安裝。

總之,bridge適用於在同一台宿主機運行多個容器的場景;host適用於不應與宿主機進行網絡隔離的場景;overlay適用於運行在不同宿主機上的容器間通信,或多個應用通過Swarm服務來共同協作的場景;macvlan適用於從虛擬機遷移配置或希望容器作為物理機一樣使用網絡的場景。

5. 總結

本文對Docker所管理的幾個基本對象——鏡像、容器、數據卷、網絡做了簡單介紹,這是認識或學習Docker的基礎,在后續實踐操作過程中,將會對各部分進行更詳細的使用說明,歡迎持續關注。


我的個人博客地址:http://blog.jboost.cn
我的微信公眾號:jboost-ksxy (一個不只有技術干貨的公眾號,歡迎關注,及時獲取更新內容)
———————————————————————————————————————————————————————————————
微信公眾號

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM