《第一本Docker書(修訂版)》——1.2 Docker組件
本節書摘來自異步社區《第一本Docker書(修訂版)》一書中的第1章,第1.2節,作者:【澳】James Turnbull(詹姆斯•特恩布爾)著,更多章節內容可以訪問雲棲社區“異步社區”公眾號查看
1.2 Docker組件
我們來看看Docker的核心組件:
Docker客戶端和服務器,也稱為Docker引擎;
Docker鏡像;
Registry;
Docker容器。
1.2.1 Docker客戶端和服務器
Docker是一個客戶端/服務器(C/S)架構的程序。Docker客戶端隻需向Docker服務器或守護進程發出請求,服務器或守護進程將完成所有工作並返回結果。Docker守護進程有時也稱為Docker引擎。Docker提供了一個命令行工具docker以及一整套RESTful API[2]來與守護進程交互。用戶可以在同一台宿主機上運行Docker守護進程和客戶端,也可以從本地的Docker客戶端連接到運行在另一台宿主機上的遠程Docker守護進程。圖1-1描繪了Docker的架構。
圖1-1 Docker架構
1.2.2 Docker鏡像
鏡像是構建Docker世界的基石。用戶基於鏡像來運行自己的容器。鏡像也是Docker生命周期中的“構建”部分。鏡像是基於聯合(Union)文件係統的一種層式的結構,由一係列指令一步一步構建出來。例如:
添加一個文件;
執行一個命令;
打開一個端口。
也可以把鏡像當作容器的“源代碼”。鏡像體積很小,非常“便攜”,易於分享、存儲和更新。在本書中,我們將會學習如何使用已有的鏡像,同時也會嚐試構建自己的鏡像。
1.2.3 Registry
Docker用Registry來保存用戶構建的鏡像。Registry分為公共和私有兩種。Docker公司運營的公共Registry叫作Docker Hub。用戶可以在Docker Hub[3]注冊賬號[4],分享並保存自己的鏡像。
根據最新統計,Docker Hub上有超過10 000注冊用戶構建和分享的鏡像。需要Nginx Web服務器[5]的Docker鏡像,或者Asterix開源PABX係統[6]的鏡像,抑或是MySQL數據庫[7]的鏡像?這些鏡像在Docker Hub上都有,而且具有多種版本。
用戶也可以在Docker Hub上保存自己的私有鏡像。例如,包含源代碼或專利信息等需要保密的鏡像,或者隻在團隊或組織內部可見的鏡像。
用戶甚至可以架設自己的私有Registry。具體方法會在第4章中討論。私有Registry可以受到防火牆的保護,將鏡像保存在防火牆後麵,以滿足一些組織的特殊需求。
1.2.4 容器
Docker可以幫用戶構建和部署容器,用戶隻需要把自己的應用程序或服務打包放進容器即可。我們剛剛提到,容器是基於鏡像啟動起來的,容器中可以運行一個或多個進程。我們可以認為,鏡像是Docker生命周期中的構建或打包階段,而容器則是啟動或執行階段。
總結起來,Docker容器就是:
一個鏡像格式;
一係列標準的操作;
一個執行環境。
Docker借鑒了標準集裝箱的概念。標準集裝箱將貨物運往世界各地,Docker將這個模型運用到自己的設計哲學中,唯一不同的是:集裝箱運輸貨物,而Docker運輸軟件。
每個容器都包含一個軟件鏡像,也就是容器的“貨物”,而且與真正的貨物一樣,容器裏的軟件鏡像可以進行一些操作。例如,鏡像可以被創建、啟動、關閉、重啟以及銷毀。
和集裝箱一樣,Docker在執行上述操作時,並不關心容器中到底塞進了什麼,它不管裏麵是Web服務器,還是數據庫,或者是應用程序服務器什麼的。所有容器都按照相同的方式將內容“裝載”進去。
Docker也不關心用戶要把容器運到何方:用戶可以在自己的筆記本中構建容器,上傳到Registry,然後下載到一個物理的或者虛擬的服務器來測試,再把容器部署到Amazon EC2主機的集群中去。像標準集裝箱一樣,Docker容器方便替換,可以疊加,易於分發,並且盡量通用。
使用Docker,可以快速構建一個應用程序服務器、一個消息總線、一套實用工具、一個持續集成(continuous integration,CI)測試環境或者任意一種應用程序、服務或工具。可以在本地構建一個完整的測試環境,也可以為生產或開發快速複製一套複雜的應用程序棧。可以說,Docker的應用場景相當廣泛。
最後更新:2017-06-06 07:36:41