說到容器化就不能不提的貨櫃鯨魚 ╮(´∀`=)
工具很多,但最常見也最廣泛使用的方式就是透過 Docker。
不管認不認識, 資訊人或多或少都看過這隻鯨魚:
Docker,一套開源後促使容器化技術迅速發展的軟體專案。
原先是 dotCloud 公司(後來改名為 Docker Inc)的內部專案。一開始,只是為了滿足公司業務需求而開發,沒想到自從 2013 年將 Docker 專案開源後,這套輕量且好上手的工具得到了大量技術人員為其貢獻原始碼,使得這套容器工具得以迅速發展起來。
Docker 包括三個基本概念:映像檔(Image)、容器(Container)、倉庫(Repository)
image
來執行應用。container
在啟動時會建立一層可寫層作為最上層)image
的位置/空間,分為公開(public)和私有(private),最大的公開倉庫是 Docker Hub。image
,不直接運行而是作為封裝 image
的基礎層使用。image
的每個執行步驟。沒關係,先從映像檔是什麼東西開始。
要啟動一個包含服務的container
,有幾件事情是必要的
image
就是定義了這些資訊的文件,Dockerfile
則是產生 image
的指令檔。
直接看 image
的組成比較好理解:docker image
是由多個 layers
組成的,每一層都是唯讀的文件,這些內容堆疊起來就是最終用來執行 container
的映像檔。
大致可分為幾種組成:
Docker Image
都有一個基礎層,通常是某個操作系統的最小安裝包(如 Ubuntu、Alpine 等)。這是其他所有層的基礎,提供了運行應用程式所需的基本環境。Dockerfile
中的指令建置的,例如安裝 packages/libraries、配置環境變數、複製程式碼等。每次執行這些指令,Docker 都會創建一個新的層。Docker Image
的最終層,包含了最終的程式碼以及運行時需要的配置和依賴。另外,Docker Image
也包含了 Metadata
,包含 image 建立時間、EXPOSE PORT 等資訊。
這樣多層次的建構方式,使得 Docker image
可以輕易的支援版本控制,一旦發生錯誤,可以立刻回復到先前的版本,不但正確還不用花費多餘的時間和人力。
Docker image
還有幾個重要的特性:
container
時,Docker 會在這個 image 的頂部添加一個可寫層(Writable Layer),這個可寫層允許container
在運行時對文件系統進行修改,如新增、刪除或更改文件,讓所有變更都存在 container
中,不會影響到原本的 image。Copy-on-Write
是一種優化技術,是指當container
需要修改某一只讀層中的文件時,才將文件複製到可寫層中。
container
需要讀取文件時,直接從 Read Only 層
中讀取內容container
需要修改Read Only 層
中的文件時,Docker 會先將該文件複製到可寫層。Read Only 層
不變。container
中新增的文件都會直接寫入到可寫層中畫重點
layers
:使image
能輕鬆支援版本控制,且越底層的image
越能互相共用。Container Layer
:保護了原始的image
不會被修改,維持其一致性。Copy-on-Write
:大幅度地提高了資源利用效率,也減少了存儲空間的浪費。
前一篇有介紹過容器化的架構圖,有印象的話,這就是 Docker 執行起來的樣子:
最下方是硬體層
,提供應用程式所需的資源。
往上一層是 Host OS
,基本上都會是 Linux。
再往上則是負責分配資源並運行 container
的 container engine
:Docker,
最上一層就是包含應用程式和 Runtime,實際運作服務 Container 啦!
其實 Docker 的優點在容器化就差不多說完了,這邊就做個簡單整理:
container
,獨立開發、測試和部署,從而提高靈活性和可伸縮性。題外話:
Docker 是容器化技術的先驅嗎?
其實容器化技術的概念和雛形在 1970s 就已經出現囉,但是 Docker 將容器的管理封裝得更簡單更標準化,促使相關技術有了革命性的進展。
image 一定要使用 Docker 產生嗎?
不一定喔!
其實還有很多工具可以使用,像是:Podman、Buildah 也都可以建立符合 OCI 的 image。
這一篇著重在介紹 Docker 的核心元素,這些元素使 Docker 實現了讓應用程式的開發和部署變得更加簡單、快速的方法。然而,隨著應用程式規模和複雜度的增加,僅僅依賴 Docker 已經不能夠滿足運營需求了。於是,像 Kubernetes 這樣以管理容器為核心的系統,開始逐漸體現它的價值。
延伸閱讀:
如果對 Docker 發展有興趣,可以參考網管人的這篇文章:輕量虛擬化改寫IT歷史 Docker容器技術細說從頭