Docker Vs Podman
翻譯自 Chetansingh 2020年4月24日的博文《Docker Vs Podman》?[1]
容器化的一場全新革命是從 Docker 開始的,Docker 的守護進程管理著所有的事情,并成為最受歡迎和廣泛使用的容器管理系統之一。
但是,請稍等!您真的會假設 Docker 是唯一有效的容器化方式而認為值得堅持去使用它嗎?
這篇博文將幫助您了解以下問題:
為什么我們不使用?Docker?為什么我們要使用?Docker?沒有別的選擇了嗎?其實,當您決定要開始使用一套新的工具進行容器管理時,Docker 便成了“別的”工具,此時沒有了 “docker containers/images”,只有 “containers/images”。
在繼續討論本文內容之前,讓我們先來了解一下 Docker 是什么以及它是如何工作的。
Docker 是什么?
Docker 是一個容器化平臺,在這個平臺中,我們可以將我們的應用程序與容器中的庫和環境綁定在一起。Docker Container 在某種程度上類似于虛擬機。
但是……
與硬件虛擬化的虛擬機不同,在 Docker 中,運行中的容器共享主機 OS 內核。
Docker 是如何工作的呢?讓我們來看一下:
Docker 流程:
Docker 的兩個主要組成模塊是:?Docker Daemon?和?Docker CLI。
請允許我簡短地解釋一下:
Docker Daemon:?一個常駐的后臺進程,幫助管理和創建 Docker 鏡像、容器、網絡和存儲卷。
Docker Engine REST API:?一個應用程序用來與 Docker 守護進程進行交互的 API; 可以通過 HTTP 客戶端訪問它。
Docker CLI:?一個用來與 Docker 守護進程進行交互的 Docker 命令行客戶端,也就是 Docker 命令。
如果換個角度思考,我們可以把下面這些問題與 Docker 聯系起來:
眾所周知,Docker 運行在單個進程上,這可能會導致單點故障。
所有子進程都歸屬于此進程。
無論何時,如果 Docker 守護進程失敗,所有子進程都會失去跟蹤并進入孤立狀態。
安全漏洞。
對于 Docker 的操作,所有步驟都需要由 root 執行。
Podman
現在我們知道了 Docker 是如何工作的,下面我們來探討有關 Podman 的主題,以及我們如何克服與 Docker 相關的大多數問題。
此時,您一定想了解“Podman 是什么?”
Podman?是一個無守護進程的容器引擎,用于在 Linux 系統上進行開發、管理和運行 OCI Containers。Containers 能以 root 模式運行,也能以非 root 模式運行。
Podman 直接與鏡像注冊表、容器和鏡像存儲進行交互。
我們知道,Docker 是建立在 runC 容器運行時之上?[2],并且使用了守護進程的; Podman 中沒有使用守護進程,而是直接使用 runC 容器運行時。
譯者注:
Podman 沒有守護進程,也不用 REST API 交互,可以使用非 root 模式運行,這便解決了上面提到的 與 Docker 相關的問題 3、4 和 5。
關于 Podman,有幾件事需要重點了解一下:
Podman 不需要啟動或管理像 Docker daemon 那樣的守護進程。
適用于 Docker 的命令在 Podman 中也是同樣可用的。您可以指定命令別名:alias docker=podman
Podman 和 Docker 的鏡像具有兼容性。
很酷……不是嗎?
Podman 入門
安裝 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?表示以分離模式在后臺運行此容器。
Podman 在后臺運行后會打印出容器 ID。(例如:f1f7215ccf26fe7bb83dd108cdb41480aae5794058a007dd85a098af0d390563)
-p: 利用端口轉發,使能夠訪問容器內的 HTTP server。
列出運行中的容器
[cloudbunny@technopanti ~]$ podman ps檢查運行中的容器
[cloudbunny@technopanti ~]$ podman inspect -l這將有助于“檢查”正在運行的容器中的元數據和相關的詳細信息 —— 狀態(運行或停止)、創建日期和容器 ID,等等。
既然我們有容器的詳細信息,我們便可以測試 http server,此例中,在端口 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???
作者 :Chetansingh
譯者 :技術譯民
出品 :技術譯站(https://ITTranslator.cn/)
END
總結
以上是生活随笔為你收集整理的Docker Vs Podman的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 程序员过关斩将--论系统设计的高可扩展性
- 下一篇: 让 CefSharp.WinForms