翻譯自 Paul Ferrill 2020年9月1日的文章《Compare Docker vs. Podman for container management》 [1]html
Docker 和 Podman 在管理容器方面提供了相似的功能,可是 Docker 的安全漏洞可能使 Podman 對於某些管理員來講更具吸引力。docker
目前 Docker 已經成爲許多 IT 管理員們事實上的標準,而且在開發人員中佔有很大的份額。 可是,Podman 因爲具備以非特權用戶身份運行且無需守護進程的能力,所以與基本的 Docker 相比,它爲管理員們提供了一些安全上的優點。安全
Docker 和 Podman 都提供許多相同的功能,例如,它們對開放式容器倡議(OCI)的運行時和鏡像規範的支持,以及它們映射命令以建立和管理容器的能力。 可是,Docker 和 Podman 之間存在一些差別,包括安全方面的問題和對守護程序的依賴。[2]cookie
考慮到 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 做爲更新的一部分的發行版。app
Docker 與 Podman 之間的一個重大區別涉及到安全問題。 Docker 守護進程須要 root 權限,這在向用戶提供 root 權限時帶來了安全挑戰。 這也意味着配置不當的 Docker 容器能夠無限制地訪問主機文件系統。管理員能夠經過遵循一些基本的最佳實踐來防止這種狀況發生,好比僅使用來自受信任的供應商提供的容器鏡像,但這種可能性仍然存在。socket
可是,管理員們使用 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 的生產系統中。
https://searchservervirtualization.techtarget.com/tip/Compare-Docker-vs-Podman-for-container-management Compare Docker vs. Podman for container management ↩︎
http://www.javashuo.com/article/p-zpmktjch-nw.html Docker Vs Podman ↩︎