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

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

 

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

docker

1. 鏡像

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

鏡像構建時,會一層一層地構建,前一層是後一層的基礎,每層構建完後就變成只讀的,不會再發生改變。鏡像分層存儲的一大好處是複用,鏡像的每一層能夠在不一樣鏡像間複用,這就比如咱們開發項目時將一些公共功能封裝成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適用於從虛擬機遷移配置或但願容器做爲物理機同樣使用網絡的場景。spa

5. 總結

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


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

 

 

原文出處:https://www.cnblogs.com/spec-dog/p/11188629.html

相關文章
相關標籤/搜索