Podman 是什麼?它和 Docker 有什麼不同?

容器編排工具作爲當今最重要的 Web 開發技術之一,衆多強者都在嘗試爭奪這一行業的主導地位。

Podman 是 RedHat 的一款產品,旨在使用類似於 Kubernetes 的方法來構建、管理和運行容器,作爲一款主流容器的可靠替代產品,它吸引了開發人員的關注。自 RHEL 8 起,Red Hat 用 CRI-O/Podman 取代了 Docker Daemon。爲什麼 Red Hat 想要擺脫 Docker Daemon?這是因爲使用 Docker Daemon 運行 Docker 有以下這些問題:

Podman 通過直接與 Image Registry、Image 和 Container 進行互動,而不是通過守護進程來解決以上問題。此外,Podman 還允許用戶在沒有完全 root 權限的情況下運行容器。

更棒的是,它還提供了與 Docker 兼容的指令,使用戶可以很輕易的從原本的 Docker 指令切換到 Podman。

Podman 和 Docker 這兩種標準的容器化工具已經有近十年的歷史了,今天這篇文章我們來對比下這兩個技術,它們雖有不同,但還是非常適合一起使用。

Docker 什麼?

Docker 是標準的容器管理技術。Docker 在行業中舉足輕重,以至於大多數人一想到容器,就會想到 Docker。

Docker 是容器編排世界的一把瑞士軍刀,在其他替代方案出現之前就已經提供了諸多特性。隨着容器管理複雜度的增加,它也必須成長爲一個獨立的、自給自足的工具,以便能提供開發人員的所有需求。

Docker 也在很短的時間內,就成爲 All-in-one 解決方案的關鍵工具之一。其中一款就是 Docker Swarm,這是一款由 Docker 原生的,可以讓你組建羣集和調度 Docker 引擎,以及用來創建和管理容器羣的解決方案。

Docker 的諸多輔助工具處理所有與容器編排相關的任務,從負載均衡到網絡,使其成爲行業的首選,不光是作爲行業技術參考。

儘管 Docker 是一個強大的系統,但這種自給自足的模式也有它的缺點。雖然可以在開發的所有階段創建和運行容器,但其他工具在與 Docker 集成交互時或多或少存在些困難。

近年來,隨着許多其他用於特定任務的專用工具的出現,Docker 成爲許多開發人員的起點,隨之,他們將一些任務分配給其他更輕量級的平臺和工具。

Podman 是什麼?

Podman 是一種開源的 Linux 原生工具,旨在根據開放容器倡議(Open Container Initiative,OCI)標準開發、管理和運行容器和 Pod。Podman 是 RedHat 開發的一個用戶友好的容器調度器,是 RedHat 8 和 CentOS 8 中默認的容器引擎。

它是一款集合了命令集的工具,設計初衷是爲了處理容器化進程的不同任務,可以作爲一個模塊化框架工作。它的工具集包括:

這些工具還可以與任何 OCI 兼容的容器引擎(如 Docker)一起工作,使其易於轉換到 Podman 或與現有的 Docker 安裝一起使用。Kubernetes 可以使用 Podman 嗎?答案是:是的。事實上,Kubernetes 和 Podman 在某些方面是相似的。

Podman 對於容器有着不同的方法論。正如它的名字所暗示的那樣,Podman 可以創建一起工作的容器 “Pod”,這是一個類似 Kubernetes 裏 Pod 的特性。Pod 在一個共同的命名空間裏,作爲一個單元來管理容器。

比較主要的好處是開發人員可以共享資源,在一個 Pod 中爲同一個應用程序使用不同的容器:一個容器用於前端,另一個容器用於後端,還有一個數據庫。Pod 的配置可以導到 Kubernetes 兼容的 YAML 文件,並應用到 Kubernetes 集羣中,從而允許容器更快地進入生產。

Podman 的另一個特性是它是無守護進程的。守護進程是在後臺運行的程序,它處理服務、進程和請求,沒有用戶界面。Podman 是一種獨特的容器引擎,因爲它實際上並不依賴於守護進程,而是作爲子進程啓動容器和 Pod。

你可能會問:“我爲什麼要使用 Podman?” 作爲一種開發和管理工具,Podman 具有獨特的優勢,這使得它在適當的環境中成爲 Docker 的可行和有趣的替代品。或者一個與 Docker 並肩工作的強大補充,因爲它支持與 Docker 兼容的 CLI 接口。

Podman vs Docker:區別

Podman 和 Docker 有許多共同的特性,但也有一些根本的區別。技術不分好壞,只是着重於哪個更適用於某些特定的場景。

Podman 與 Linux 內核交互,通過 runC 容器運行時進程而不是 Daemon 來管理容器。Buildah 實用程序用於替代 Docker build 作爲容器鏡像構建工具,Docker push 被 Skopeo 替代,用於在註冊表和容器引擎之間移動容器鏡像。

架構

Docker 使用守護進程,一個正在後臺運行的程序,來創建鏡像和運行容器。Podman 是無守護進程的架構,這意味着它可以在啓動容器的用戶下運行容器。Docker 有一個由守護進程引導的客戶端——服務器邏輯架構;但 Podman 不需要此類守護進程。

Root 特權

由於 Podman 沒有守護進程來管理其活動,也無需爲其容器分配 Root 特權。Docker 最近在其守護進程配置中添加了 Rootless 模式,但 Podman 首先使用了這種方法,並將其作爲基本特性進行了推廣。原因如下。

安全

Podman 比 Docker 安全嗎?Podman 允許容器使用 Rootless 特權。Rootless 容器被認爲比 Root 特權的容器更安全。在 Docker 中,守護進程擁有 Root 權限,這使得它們易成爲攻擊者的首選入侵點。

Podman 中的容器默認情況下不具有 Root 訪問權限,這在 Root 級別和 Rootless 級別之間添加了一個自然屏障,提高了安全性。不過,Podman 可以同時運行 Root 容器和 Rootless 容器。

Systemd

如果沒有守護進程,Podman 需要另一個工具來管理服務並支持後臺運行的容器。Systemd 爲現有容器創建控制單元或用來生成新容器。Systemd 還可以與 Podman 集成,允許它在默認情況下運行啓用了 Systemd 的容器,從而無需進行任何修改。

通過使用 Systemd,供應商可以將他們的應用程序封裝爲容器用來安裝、運行和管理,因爲現在大多數應用程序都是通過這種方式打包和交付的。

構建鏡像

作爲一款自給自足的工具,Docker 可以自己構建容器鏡像。Podman 則需要另一種名爲 Buildah 的工具的輔助,該工具充分體現了它的特殊性:它是爲構建鏡像而設計的,而不是爲構建容器而生。

Docker Swarm

Podman 不支持 Docker Swarm,這可能會在某些項目中被刨除在外,因爲使用 Docker Swarm 命令會產生一個錯誤。然而,Podman 最近增加了對 Docker Compose 的支持,使其與 Swarm 兼容,從而克服了這個限制。當然,Docker 由於其原生的特性,與 Swarm 當然融合得很好。

All in one vs 模塊化

也許這就是這兩種技術的關鍵區別:Docker 是一個獨立的、強大的工具,在整個循環中處理所有的容器化任務,有優點也有缺點。Podman 採用模塊化的方法,依靠專門的工具來完成特定的任務。

Podman vs Docker:他們能合作嗎?

作爲最好的、最易應用於 Docker 的替代方案——用戶可以將 Docker 別名設置爲 Podman(alias docker=podman),且不會出現任何問題,正如本演示 [1] 中所示——Podman 是一個非常強大的容器化任務工具。

Podman 會是 Docker 的替代品嗎?

如果你要從頭開始一個項目,Podman 可以是一個首要的容器化技術選項。如果項目正在進行,並且已經在使用 Docker,這還需要具體情況具體分析,實際情況並不一定值得去改。而且作爲一款 Linux 原生的應用,它要求相關開發人員具備 Linux 的相關技能。

開發人員可以在開發階段依賴 Docker,然後在運行時環境中將項目推向 Podman,從而結合使用這兩種工具,並受益於 Podman 所提供的更安全性。由於它們都是 OCI 兼容的,因此,兼容性不是個問題。

Docker 和 Podman 能共存嗎?是的,而且會很好。許多開發人員一直在合用 Docker 和 Podman 來創建更安全、更高效、更敏捷的框架。它們有很多共同之處,無論是從 Docker 到 Podman 的轉變,亦或是二者合併使用,都可以做到無縫銜接。

你可以通過此鏈接 [2] 在 Linux 機器上直接使用 Podman,如果手邊沒有,也可以在線 [3] 試用一下。

相關鏈接:

  1. https://www.youtube.com/watch?v=riZ5YPWufsY

  2. https://github.com/containers/podman

  3. https://www.katacoda.com/courses/containers-without-docker/running-containers-with-podman

作者:伊海峯 譯

來源:http://dockone.io/article/2434807

原文:https://www.imaginarycloud.com/blog/podman-vs-docker/

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