翻譯自 Chetansingh 2020年4月24日的博文《Docker Vs Podman》 [1]docker
容器化的一場全新革命是從 Docker 開始的,Docker 的守護進程管理着全部的事情,併成爲最受歡迎和普遍使用的容器管理系統之一。安全
可是,請稍等!您真的會假設 Docker 是惟一有效的容器化方式而認爲值得堅持去使用它嗎?bash
這篇博文將幫助您瞭解如下問題:網絡
爲何咱們不使用 Docker? 爲何咱們要使用 Docker? 沒有別的選擇了嗎?其實,當您決定要開始使用一套新的工具進行容器管理時,Docker 便成了「別的」工具,此時沒有了 「docker containers/images」,只有 「containers/images」。curl
在繼續討論本文內容以前,讓咱們先來了解一下 Docker 是什麼以及它是如何工做的。tcp
Docker 是一個容器化平臺,在這個平臺中,咱們能夠將咱們的應用程序與容器中的庫和環境綁定在一塊兒。 Docker Container 在某種程度上相似於虛擬機。
可是……工具
與硬件虛擬化的虛擬機不一樣,在 Docker 中,運行中的容器共享主機 OS 內核。測試
Docker 是如何工做的呢?讓咱們來看一下:url
Docker 流程:命令行
Docker 的兩個主要組成模塊是: Docker Daemon 和 Docker CLI。
請容許我簡短地解釋一下:
Docker Daemon: 一個常駐的後臺進程,幫助管理和建立 Docker 鏡像、容器、網絡和存儲卷。
Docker Engine REST API: 一個應用程序用來與 Docker 守護進程進行交互的 API; 能夠經過 HTTP 客戶端訪問它。
Docker CLI: 一個用來與 Docker 守護進程進行交互的 Docker 命令行客戶端,也就是 Docker 命令。
若是換個角度思考,咱們能夠把下面這些問題與 Docker 聯繫起來:
如今咱們知道了 Docker 是如何工做的,下面咱們來探討有關 Podman 的主題,以及咱們如何克服與 Docker 相關的大多數問題。
此時,您必定想了解「Podman 是什麼?」
譯者注:
Podman 沒有守護進程,也不用 REST API 交互,可使用非 root 模式運行,這便解決了上面提到的 與 Docker 相關的問題 三、4 和 5。
關於 Podman,有幾件事須要重點了解一下:
alias docker=podman
很酷……不是嗎?
在 CentOS 8 上安裝 podman:
[cloudbunny@technopanti ~]$ yum install podman
安裝 podman 以後,您可使用下面命令檢查版本:
[cloudbunny@technopanti ~]$ podman --version
輸出:podman version 2.1.1
[cloudbunny@technopanti ~]$ podman run -dt -p 8080:8080/tcp -e HTTPD_VAR_RUN=/var/run/httpd -e HTTPD_MAIN_CONF_D_PATH=/etc/httpd/conf.d \ -e HTTPD_MAIN_CONF_PATH=/etc/httpd/conf \ -e HTTPD_CONTAINER_SCRIPTS_PATH=/usr/share/container-scripts/httpd/ \ registry.fedoraproject.org/f29/httpd /usr/bin/run-httpd
因爲在 podman run
命令中 -d
表示以分離模式運行容器,所以 Podman 將在容器運行後打印出容器 ID。注意,這裏咱們使用了端口轉發來訪問容器內的 HTTP server。
註釋:
-d
表示以分離模式在後臺運行此容器。-p
: 利用端口轉發,使可以訪問容器內的 HTTP server。[cloudbunny@technopanti ~]$ podman ps
[cloudbunny@technopanti ~]$ podman inspect -l
這將有助於「檢查」正在運行的容器中的元數據和相關的詳細信息 —— 狀態(運行或中止)、建立日期和容器 ID,等等。
既然咱們有容器的詳細信息,咱們即可以測試 http server,此例中,在端口 8080 上執行端口轉發。
執行命令:
[cloudbunny@technopanti ~]$ curl http://localhost:8080
上面的命令將會顯示咱們容器化的 httpd server 中的 index 頁面。
[cloudbunny@technopanti ~]$ podman logs --latest
但願您享受本文的閱讀 😃
https://medium.com/technopanti/docker-vs-podman-c03359fabf77 Docker Vs Podman ↩︎
https://www.docker.com/blog/runc/ Introducing runC ↩︎