2022 年要考慮的 7 種 Docker 替代方案

作者|Sudip Sengupta

編譯|辛曉亮

來源 | infoQ 架構頭條

許多企業都採用容器來進行開發和管理穩定的應用程序,Docker 是該領域功能最豐富且使用最廣泛的工具之一,已有數百萬應用程序在使用它。Docker 本身有着強大的獨立生態系統,並提供了一個廣泛的工具包來管理容器化過程,但 Docker 還有其他替代品,它們提供了獨特的用例和功能。本文深入探討了 Docker 七個替代品,其中包括一系列綜合平臺,如 Docker 以及可以作爲 Docker 生態系統組件替代品的工具等。

1 Podman

Podman 是 RedHat 開發的一個無守護程序的開源 Linux 原生容器引擎,用於構建、運行和管理 Linux OCI 容器與容器鏡像。儘管 Podman 提供了一個類似於 Docker 的命令行界面,但它的操作方式並不相同。

Docker 和 Podman 之間的一個顯著區別是,Docker 運行一個持久的、自給自足的運行時來管理其對象或稱爲 dockerd 的守護進程;而 Podman 並不依賴守護進程來工作,相反,Podman 將容器作爲子進程啓動,它還直接與註冊表和使用運行時進程的 Linux 內核進行交互,也正因如此,Podman 被稱爲無守護進程的容器技術。

沒有守護進程提高了 Podman 作爲容器引擎的靈活性,消除了對單個進程的依賴。Podman 與 Docker 的另一大不同就是它不需要 root 權限。這一特點提供了一個額外的安全緩衝區,限制了某些可能操縱關鍵系統設置並使容器和包含的應用程序易受攻擊的潛在危險進程。

此外,Podman 可以運行 pod-- 包含一個或多個容器的集合,作爲一個單一實體管理,並利用共享的資源池。通過這項能力,Podman 用戶可以將他們的工作負載轉移到 Kubernetes。

2 LXD

LXD 一個專爲 LXC Linux 容器設計的開源容器引擎。LXC 使用戶能夠在隔離的容器或類似於虛擬機的虛擬環境中運行應用程序,而無需承擔管理單個內核的技術負擔。LXD 提供了一個用於連接 LXC 軟件庫的接口,同時創建了一個守護進程,負責處理網絡、數據存儲和管理多個 LXC 容器。儘管 LXC 可以作爲獨立工具運行,但它擁有有限的功能子集。LXD 提供了這些附加功能,因此依賴於 LXC 工作。

LXD 與 Docker 的主要區別如下。與 Docker 建議每個容器只有單個進程的設計模式不同,LXC/LXD 中的容器可以運行多個進程。此外,Docker 容器可移植性更強,爲與 LXD 相比,Docker 有效地抽象了資源。最後,Docker 支持在 Windows 和 macOS 環境上運行,但 LXD 只支持 Linux。

3 containerd

containerd 是一個高級容器運行時,它通過在底層運行 runc 以提供操作系統和容器引擎之間的接口。runc 是一個支持 Windows 和 Linux 的守護進程,它抽象了特定於操作系統的功能,使運行和監督容器以及管理圖像傳輸和存儲變得更加容易。

containerd 提供的這種抽象級別功能消除了進行若干低級系統調用的複雜性,使得容器的可移植性得以實現。然而,與 Docker 不同,containerd 不處理鏡像的構建或卷的創建。有趣的是,containerd 是 Docker 的默認運行時,現在它是一個獨立的工具,就像 runc 一樣。這也使得 containerd 像 Kubernetes 一樣成爲一個方便的編排工具,containerd 也是最受歡迎的 Docker 替代品之一。

4 Buildah

Buildah 是紅帽基金會爲容器化系統開發的一個 OCI 鏡像構建工具。它是一個提供類似於在 Docker 中運行 docker build 的功能的工具。Buildah 經常與 Podman 一起使用,互作補充,例如,Podman 在後臺使用 Buildah 功能的子集來實現其構建過程。

它可以從 Dockerfile 或 Containerfile 中構建鏡像,並生成與使用 Docker 創建的鏡像相同的鏡像,因爲這些鏡像是符合 OCI 的。此外,它還提供了對鏡像層的細粒度控制,允許在一個單一層中進行多次修改提交。它還提供了從頭開始構建鏡像的能力,即不包含任何內容的鏡像,這讓用戶可以自由地只添加運行應用程序所需的軟件包。最後,與 Docker 不同的是,在 Buildah 中,用戶只能看到他們構建的鏡像。

5 BuildKit

BuildKit 是第二代構建鏡像的 Moby 項目,在較新的 Docker 版本中作爲實驗性功能提供。與 Docker 一樣,它使用守護程序運行。不過,標準 Docker 構建和 BuildKit 之間的主要區別之一是,前者是逐層構建,後者提供並行構建處理。這個功能提高了性能,使構建速度更快。BuildKit 還允許跳過未使用的階段,改善增量構建,並允許無根構建。此外,BuildKit 使用一個緩存來減少重建圖像每一層的需要。

6 Kaniko

Kaniko 是一個谷歌鏡像構建工具,它可以從 Dockerfile 構建鏡像。它和 Buildah 一樣是無守護進程的,但更側重於在 Kubernetes 中構建鏡像。Kaniko 對於本地開發實例來說不是很方便,因爲它通常作爲鏡像與 Kubernetes 等容器編排器一起運行。對於 Kubernetes 集羣中的持續集成和交付管道,Kaniko 可以成爲一個實用的工具。

7 RunC

RunC 以前是嵌入到 Docker 架構中的一個模塊,在 2015 年作爲獨立工具發佈。此後,它成爲一個廣泛使用的、標準化的、可互操作的容器運行時。DevOps 團隊可以將其作爲 Docker 或其他定製容器引擎的一部分。RunC 屬於容器化生態系統中的容器運行時部分。容器運行時是處理容器運行的容器引擎中使用的較低級別的組件。

儘管 Docker 爲組織在容器化過程中所需的各個方面提供了一個全面的工具包,但某些 DevOps 功能可能需要探索其他替代方案。但是,在選擇任何此類選項時也需牢記此類替代方案所運行的主機操作系統及其使用情況。

原文鏈接:

https://www.containiq.com/post/docker-alternatives

本文由 Readfog 進行 AMP 轉碼,版權歸原作者所有。
來源https://mp.weixin.qq.com/s/_eYSHi4J-wsgzkNN9y3Bfw