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來查詢我們需要的映象,為我們節省構建映象的時間。
私有
我們也可以自己搭建自己的私有倉庫。