翻译自 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 ↩︎