|
跟著 Docker 隊長精通容器部署、管理與維運
Docker 是一個在容器中執行應用程式的平台,容器技術( container )在軟體開發中應用廣泛,從雲端的無伺服器架構( Serverless )到企業的產品規劃,不管對於開發還是維運人員,Docker 都佔據了非常重要的一環,在 2021 年 Stack Overflow 的問卷調查當中,Docker 是工程師最想學習的工具( Most Wanted Tools ) 。
Docker 的應用場景
Docker 可以讓您快速地建立、測試和部署應用程式。做法是將軟體封裝到名為容器的標準化單位,其中包含涵式庫、系統工具、程式碼和執行時間等執行軟體所需的所有項目。使用 Docker ,您可以將應用程式快速地部署到各種環境並加以擴展,而且支援團隊後續的各種操作。現今 Docker 的主要應用可以分為以下五大種:
這五個場景,幾乎包含了 IT 行業目前正在發生的所有情況,很顯然 Docker 是這一切的關鍵,現在熱門的雲端服務以及軟體都支援 Docker ,甚至以 Docker 為核心技術開發相關的產品,或藉由容器技術將公司導入 DevOps 文化進行數位轉型。
Docker 的運作方式
Docker 透過提供執行程式碼的方式進行運作。Docker 是容器的作業系統。與虛擬機器( Virtual.Machine, VM )模擬電腦硬體的方法相似,容器可虛擬化電腦的作業系統。Docker 安裝在每部電腦上,並提供簡單的命令讓您使用以建立、啟動或停止容器。
容器可以想像成是箱子( Box ),每個容器就是一個箱子,箱子內裝的是一台虛擬電腦,虛擬電腦上會有一個應用程式在運行,而且虛擬電腦擁有自己的本機名稱( Hostname) 、IP 地址(I P address )和儲存空間( Disk ),下圖說明了應用程式和容器之間的關係:
圖一、容器環境中的應用程式
容器裡面的資源包含了本機名稱、IP 地址、Docker 的檔案系統,這些都是由 Docker 所管理,構成前面所謂的箱子(Box)。 而容器中的應用程式在執行時,就像是在箱子內的虛擬電腦獨立運作,看不到箱子(容器)外的東西。您可以在實際的電腦上運行多個容器,並由 Docker 來負責管理每個容器的環境,每個容器都會有獨立的主機名稱、IP. 位址、儲存空間,彼此不會互相干擾。 然而運行應用程式所需的 CPU、記憶體和作業系統,則是共用實體電腦的資源,您可以藉由下圖來了解容器、 Docker 和實體電腦的關係:
圖二、多個容器在同一台電腦上執行,它們共用作業系統、CPU以及記憶體資源。
從上圖可以看出 Docker 可以幫助我們解決軟體開發中的兩大難題:軟體密集度( density )以及隔離環境( isolation )。使用 Docker 可以減少開發人員在途中遇到的問題,進而加速整個工作流程。
使用 Docker 的原因
在現今的開發流程中,大部分的團隊都還是利用虛擬機器.(Virtual.Machine, VM)來解決上述所說的兩個難題。虛擬機器和容器的概念非常像,它的運作機制比容器更像是我們剛剛比喻的箱子,箱子內的虛擬電腦擁有更完整的資源,我們可以從上圖看出兩者的不同。上圖為一個電腦執行了多個容器,而下圖為一個電腦上執行了多個虛擬機。
圖三、多個 VM 在同一台電腦上執行,每個 VM 都有自己的作業系統。
Docker 更有效解決了軟體開發的難題,它比虛擬機更好的地方是,不需要犧牲軟體密集度,就能隔離不同的應用程式,所有容器共用電腦上的作業系統,這讓它非常輕量化,而且容器可以實現快速啟動,不會像虛擬機一樣肥大。所以用同樣的硬體資源,您可以跑的容器數量大概是虛擬機的五到十倍,另外一個優點就是效率,Docker 執行的速度是虛擬機的二到三倍。還能達到快速交付程式碼、標準化應用程式操作、無縫移動程式碼,以及透過提高資源使用率節省成本。Docker 簡單易懂的語法還能為您提供完整的控制權。 開發或維運人員使用 Docker 可能會面臨以下幾個問題:
|