从Docker过渡到Podman

2020-11-21 12:18:15

当您需要提高安全性,使用名称空间的唯一标识符(UID)分离以及与systemd的集成时,Podman是Docker容器的绝佳替代品。在本文中,我将通过实际示例向您展示如何安装Podman,使用其基本命令以及如何从Docker命令行界面(CLI)过渡到Podman。您还将看到如何使用Podman运行现有映像以及如何设置端口转发。

Podman是一种无守护进程的,开源的Linux原生工具,旨在开发,管理和运行Open Container Initiative(OCI)容器和Pod。它具有与Buildah,Skopeo和CRI-O类似的目录结构。 Podman不需要活动的容器引擎即可执行命令。

Podman的最大优势之一是其与Docker的完全CLI兼容性。实际上,在构建Podman时,Docker用户可以进行调整,而无需进行任何重大更改。例如,您可以使用alias命令为Podman创建docker别名:

您可以使用Podman运行熟悉的命令,例如pull,push,build,commit,tag等。

您还可以使用Podman运行安全的无根容器。通过加入用户名称空间并在其中设置根访问权限,可以使Podman能够挂载某些文件系统并设置容器而无需升级特权。

幸运的是,由Docker和Podman创建的映像与OCI标准兼容。这意味着Podman可以从Docker Hub和Quay.io等容器注册表中进行推入和拉出。

例如,让我们测试Funbox容器,该容器结合了终端命令和ASCII艺术。首先,使用以下git命令将存储库克隆到本地目录中:

下载必要的文件后,您可以提取基础映像和其他要求以构建和运行容器:

在这种情况下,我们在docker run命令中使用了以下标签:

-it标记将容器连接到终端,以便您可以与其进行交互。

现在,我们有一个活动的容器正在运行(我的容器正在Debian Jessie之上运行)。让我们添加一个参数来查看实际使用的Funbox:

如果您在控制台屏幕上看到Nyan Cat,那么您都可以使用Podman部署并与容器进行交互。

数十个容器可用于Podman下载和使用。在此示例中,让我们在CentOS容器中设置一个简单的Apache HTTP Server 2.4。首先,从Docker集线器中提取要使用的基本映像:

创建基础图像后,请使用podman图像检查容器是否已准备就绪。您应该看到类似于图2所示的输出:

要使用基础映像运行新容器,请使用带有特定标签(例如-it)的podman run命令将其附加到CLI。使用--name定义自定义名称。最后,定义容器应运行的基本映像:

要创建Apache Web服务器,我们可以使用默认的软件包安装程序来安装httpd程序。对于CentOS,非常好:

现在,您可以将容器中的内容提供给服务器的公共IP地址。

接下来,我们将文本添加到容器var / www / html目录中的index.html文件中。随时自定义您的消息,或在下面添加默认值:

使用podman commit提交更改。使用标签为您的自定义容器定义名称和自定义版本:

最后,启动容器,然后将对端口8080的服务器的公共IP地址发出的所有请求转发到容器上的端口80。使用Podman标记-p进行端口转发,并指定要运行的容器。确保httpd正在作为前台进程运行:

要从主机设备查看网页,请在指定端口8080的同时运行curl命令。您应该看到图4所示的屏幕。

我在本文中演示的每个命令都与Docker CLI兼容。 Podman通过systemd具有强大的集成功能。您可以使用它来运行无根容器,它是在RHEL 8上运行OCI容器的强大容器映像。

您可以通过设置此Katacoda场景继续试验Podman,该场景直接在浏览器中提供一个交互式环境。

如果需要容器编排,则可以将Podman与Kubernetes或Red Hat OpenShift一起使用。要开始使用这些平台,请访问kubernetesbyexample.com和Learn.openshift.com。

如果您想继续学习Podman,请从Red Hat Developer上的这些文章开始: