Docker 與 Podman 容器管理的比較

技術譯民發表於2020-12-04

翻譯自 Paul Ferrill 2020年9月1日的文章《Compare Docker vs. Podman for container management》 [1]

Docker 和 Podman 在管理容器方面提供了類似的功能,但是 Docker 的安全漏洞可能使 Podman 對於某些管理員來說更具吸引力。

docker vs podman

目前 Docker 已經成為許多 IT 管理員們事實上的標準,並且在開發人員中佔有很大的份額。 但是,Podman 由於具有以非特權使用者身份執行且無需守護程式的能力,因此與基本的 Docker 相比,它為管理員們提供了一些安全上的優勢。

Docker 和 Podman 都提供許多相同的功能,例如,它們對開放式容器倡議(OCI)的執行時和映象規範的支援,以及它們對映命令以建立和管理容器的能力。 但是,Docker 和 Podman 之間存在一些差異,包括安全方面的問題和對守護程式的依賴。[2]

考慮到 Podman 不使用守護程式來開發、管理和執行 OCI 容器,因此它必須在 Linux OS 上執行。 容器可以以 root 模式執行,也可以以非 root 執行模式執行。Docker 利用一個守護程式(該守護程式是一個持久的後臺程式)來處理主機上所有容器的管理職責。Docker 依賴於客戶端/服務端(C/S)架構,守護程式扮演著服務端的角色,而客戶端通過命令列介面(CLI)進行通訊。

Docker 使用本機 Windows 守護程式就可以很好地執行 Windows 或基於 Linux 的映象。Podman 需要 Windows Subsystem for Linux 版本2(WSL2)才能正常執行。 因此,管理員們必須有2020年5月以後的 Windows 10 更新才能開始使用 Podman,因為這是第一個將 WSL2 作為更新的一部分的發行版。

安全

Docker 與 Podman 之間的一個重大區別涉及到安全問題。 Docker 守護程式需要 root 許可權,這在向使用者提供 root 許可權時帶來了安全挑戰。 這也意味著配置不當的 Docker 容器可以無限制地訪問主機檔案系統。管理員可以通過遵循一些基本的最佳實踐來防止這種情況發生,比如僅使用來自受信任的供應商提供的容器映象,但這種可能性仍然存在。

但是,管理員們使用 Podman 可以以非特權使用者啟動容器。這就使得 Podman 在鎖定環境場景中具有了超越 Docker 的優勢。 話雖如此,管理員們將無法以非特權使用者身份在主機系統上執行任何需要 root 許可權的命令。這包括對映主機上低於 1024 的任何特權埠號,以及預設的 HTTP 埠號 80。

此外,Docker 和 Podman 都使用 CLI 作為主要管理介面。但是,Docker 使用 REST API 終端與守護程式進行通訊,且較舊的版本使用繫結到本機 IP 地址的 TCP socket 通訊。這為跨站偽造利用提供了一個潛在的攻擊面。Docker 在 0.5.2 版本中通過引入 UNIX socket 解決了這個漏洞(管理員可以使用傳統的 UNIX 許可權進行控制,以限制訪問)。考慮到 Podman 不依賴守護程式,因此不易受到此類攻擊的影響。

容器編排

在容器編排方面,Kubernetes 已經成為佔據主導地位的參與者。VMware 已採用 Kubernetes 作為 VM 以及連線到執行中的容器的所有其他裝置的主要管理平臺。 Kubernetes 使用術語 pod 來定義共享某些資源的容器集合。Podman 通過實現 pod 命令,將多個容器作為一個實體進行管理,從而支援相同的概念。

同樣,Docker 為容器編排提供了多個選項。Docker Swarm 是 Docker 維護的用於管理叢集的本地工具。Docker 還與 Kubernetes 整合得很好,這是大多數開發團隊的主流選擇。 對於 Windows 部署,管理員可以選擇在安裝過程中啟用 Kubernetes,從而可以從管理員的桌上型電腦或膝上型電腦直接訪問 Kubernetes 命令。

更進一步來說,管理員可以圍繞持續整合和持續部署(CI/CD)模型構建他們的應用程式,在該模型中,開發和測試工作可以基於一些簡單的配置檔案在任何地方進行。當管理員準備將釋出推送到生產環境時,只需執行幾個額外的步驟即可更改部署目標。

Podman 和 Docker 都符合 OCI 映象標準,但僅就安全特性而言,Podman 是值得一試的。Podman 還提供了本地命令來支援 pod 的構建和測試,從而著眼於部署到一個執行 Kubernetes 的生產系統中。


作者 : Paul Ferrill
譯者 : 技術譯民
出品 : 技術譯站
連結 : 英文原文


  1. https://searchservervirtualization.techtarget.com/tip/Compare-Docker-vs-Podman-for-container-management Compare Docker vs. Podman for container management ↩︎

  2. https://www.cnblogs.com/ittranslator/p/14057822.html Docker Vs Podman ↩︎

相關文章