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