1. 程式人生 > >Docker的基本組成

Docker的基本組成

  • Docker Client 客戶端
  • Docker Daemon 守護程序
  • Docker Image 映象
  • Docker Container 容器
  • Docker Registry 倉庫

Docker客戶端/守護程序

C/S架構

    Docker 是C/S架構的程式,Docker客戶端向Docker伺服器端也就Docker的守護程序發出請求,守護程序處理完所有的工作並返回結果。

本地/遠端

    Docker客戶端對伺服器端的訪問既可以是本地,也可以是遠端。

Docker Image 映象

這裡寫圖片描述

容器的基石

    映象是Docker容器的基石,容器基於映象啟動和執行,映象就好比容器的原始碼,儲存了用於啟動容器的各種條件。

層疊的只讀檔案系統

    Docker映象是一個層級的只讀檔案系統,最底端是一個引導檔案系統即bootfs,這很想典型的linux的引導檔案系統,Docker使用者幾乎不會和引導檔案有互動。實際上,當一個容器啟動後,它將會被移動到記憶體中,而引導檔案系統則會被解除安裝。Docker系統的第二層是rootfs檔案系統,rootfs檔案系統可以是一個或多個作業系統,比如Centos, Ubuntu,在傳統的linux引導過程中rootfs檔案系統會最先以只讀的方式載入,當引導結束並完成了引導檢查後,它才會被切換為讀寫模式。但是在Docker裡,rootfs檔案系統永遠只能是隻讀狀態。

聯合載入

    Docker運用聯合載入技術,又會在rootfs檔案系統之上載入更多的只讀檔案系統,聯合載入指的是一次同時載入多個檔案系統,但是在外面看起來,只能看到一個檔案系統,聯合載入會將各層檔案系統疊加到一起,這樣最終的檔案系統會包含所有的底層檔案和目錄,Docker將這樣的檔案系統稱為映象。一個映象可以放到另一個映象的頂部,對於下面的映象稱為父映象,可以依次類推知道映象棧的最底部,最底部的映象稱為基礎映象。

Docker Container 容器

通過映象來啟動

     容器通過映象來啟動,Docker的容器是Docker的執行來源,容器中可以執行客戶的一個或多個程序,如果說映象是Docker生命週期的構建和打包階段,那麼容器則是啟動和執行階段。

啟動和執行階段

    當一個容器啟動時Docker會在該映象的最頂層,載入一個讀寫檔案系統也就是一個可寫層檔案層,我們在Docker中執行的程式,就是在可寫層執行的。

寫時複製(copy on write)

    當Docker第一次啟動一個容器時,初始的讀寫層是空的,當檔案系統發生變化時,這些變化都會應用到這一層上,比如如果想修改一個檔案,檔案首先會從讀寫層下面的只讀層,複製到讀寫層,該檔案的只讀版本依然存在,但是已經被該檔案讀寫層的檔案副本所隱藏,這就是Docker中一個重要的技術寫時複製(copy on write)每個讀映象層都是隻讀的,並且以後永遠不會發生變化,當新建立一個容器時,Docker會構建出一個映象棧。就像圖中所表現的 這裡寫圖片描述 在棧的最頂層新增可寫層,這個讀寫層加上下面的映象層以及一些配置資料,就構成了一個容器,容器的這種特點,加上映象分層的框架,使我們可以快速的構建映象,並執行包含我們自己的應用程式的容器。

Docker Registry 倉庫

    Docker用倉庫來儲存使用者構建的映象,倉庫分為公有和私有兩種。

公有

    Docker公司自己提供了一個公有倉庫叫Docker Hub,我們可以在Docker Hub上去註冊賬號分享並儲存自己的映象。也可以通過Docker Hub來查詢我們需要的映象,為我們節省構建映象的時間。

私有

    我們也可以自己搭建自己的私有倉庫。