Podman - 下一代Linux容器工具
Podman - 下一代Linux容器工具
podman是一个用于处理容器的开源Linux工具。 包括注册表中的容器,例如docker.io和quay.io. 在本文中,将展示如何使用podman构建容器映像并从中创建容器。 接下来,我展示如何将图像上传到注册表,最后,展示如何使用docker在非Linux系统上使用podman创建的完全兼容的图像创建容器。
开始之前,快速了解项目名称及徽标。 像展示的那样,podman可以使用容器,但也适用于在同一主机上一起部署的容器,容器组。 (如果了解Kubernetes,就会熟悉podman的工作原理。)重要的是,一组海豹被称为豆荚,因为上面有令人敬畏的豆荚标志。 不会在这里讨论pods,的确它是该工具的一个很棒的功能。
足够的背景,让我们继续前进。这里使用的是reshot linux
第一步是安装podman。 像往常一样,明智的第一步是运行更新,以获得良好的系统:
$ sudo dnf -y update
在系统是最新时,继续安装podman:
$ sudo dnf -y install podman
使用yum或apt-get来安装和管理软件。
准备podman,可使用别名docker = podman。 这意味着Linux系统将始终调用podman,即使习惯性地输入docker也是如此。 出于研究目的,运行docker和podman来表明它们是兼容的,为了区分,最好不要使用别名。
安装后,从sudo podman版本开始查看正在使用的版本。 这里使用的是0.9.3.1版本:
$ sudo podman versionpodman version 0.9.3.1
这里以root身份运行podman,该命令永远不需要root访问权限。 很快就会谈到root访问权限。
接下来,运行podman info 以获取有关环境的一些信息:
$ sudo podman info. . . registries: - docker.io - registry.fedoraproject.org - quay.io - registry.access.redhat.com - registry.centos.org . . .
唯一细节是podman在系统上使用了五个注册表。 正在尝试加载容器映像,它首先在本地计算机上查找,然后按照列出的顺序检查其他注册表。
使用下面的Dockerfile,并使用podman来构建一个图像。 该文件将Colossal Cave Adventure游戏的源代码复制到容器映像(WORKDIR和COPY命令)中,出于安全原因(RUN命令的前六行)安装一些内核更新,以构建 代码(接下来的五行RUN),最后构建代码(RUN的最后一行):
FROM registry.centos.org/che-stacks/centos-stack-base WORKDIR /usr/src/open-adventure COPY ./open-adventure /usr/src/open-adventure RUN sudo yum -y update && \ sudo yum -y install kernel-headers && \ sudo rpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org && \ sudo rpm -Uvh http://elrepo.org/linux/kernel/el7/x86_64/RPMS/elrepo-release-7.0-3.el7.elrepo.noarch.rpm && \ sudo yum --enablerepo=elrepo-kernel -y install kernel-ml && \ sudo yum --enablerepo=elrepo-kernel -y swap kernel-headers -- kernel-ml-headers && \ sudo yum -y install centos-release-scl && \ sudo yum -y install gcc && \ sudo yum -y install make && \ sudo yum -y install libedit-devel && \ sudo yum -y install python-yaml && \ sudo make
CMD tail -f /dev/null
用命令创建容器映像:
$ sudo podman build -t open-adventure:podman .STEP 1: FROM registry.centos.org/che-stacks/centos-stack-base Getting image source signatures Copying blob sha256:f9ce27a295e879233c8fbbf9ab67944a10e1ce80da69a46f87c583082a1ff3bb . . . STEP 8: CMD tail -f /dev/null --> 9e5d996316fac25084c5fa4d62ff4cbebad39dd8913ca4aff46c53653589ec7 STEP 9: COMMIT open-adventure:podman
(一如既往,不要忘记构建命令末尾的点。)pull基本映像需要几分钟,尤其是第一次构建容器映像时。 这是铁的数据,但根据我的经验,使用podman构建映像似乎没有比docker更快或更慢。
正如您所料,运行podman映像会显示刚构建的映像:
$ sudo podman imagesREPOSITORY TAG IMAGE ID CREATED SIZElocalhost/open-adventure podman a2b9a17504ac About a minute ago 1.1GB registry.centos.org/che-stacks/centos-stack-base latest
请注意,localhost /已添加到图像的名称。 这告诉podman图像位于本地计算机上的图像缓存中。
接下来,我将从图像中创建一个容器。 podman run --rm -it [我刚刚创建的图像的名称] / bin / bash。 这在容器启动时运行bash shell。
$ podman run --rm -it open-adventure:podman /bin/bashssh-keygen: generating new host keys: RSA1 RSA DSA ECDSA ED25519 [user@d767729eca88 open-adventure]$
将localhost /添加到图像名称的开头,可以工作,指出一点。
在容器内部进行bash提示,这个容器里有Colossal Cave Adventure,正如podman构建图像时编译的那样。 可以运行./advent并玩游戏。 进入建筑物内,吃点东西,喝点东西,然后退出游戏。 诸如此类的事情。
这里的要点是我创建了一个图像,可以与任何想要玩游戏的人分享。 当然,也可以构建包含有用软件的图像。
谈到分享,我会把图像放在quay.io的公共回购中。 首先,我将使用podman登录:
sudo podman login quay.io -u dougtidwell -p [password]
注意,把图像推送到quay.io时,必须指定quay.io repo和用户名(dougtidwell)作为远程图像名称的一部分。
根据映像的基本操作系统,quay.io可能会扫描安全漏洞。 我使用未安装任何内核更新的修改过的Dockerfile构建了标记为不安全的图像。 该图像有一些漏洞,quay.io给了我帮助我解决问题的建议。 我留下旧图像来说明问题。 (关键是安全扫描非常酷。)
根据映像的基本操作系统,quay.io可能会扫描安全漏洞。 使用未安装任何内核更新的修改过的Dockerfile构建了标记为不安全的图像。 该图像有一些漏洞,quay.io给出帮助解决问题的建议。 (关键是安全扫描非常酷。)
最后,为了结束演示,让我们回到我的Mac并使用docker从quay.io中提取图像。 请记住,podman只是Linux,所以我们必须使用docker。 我在一分钟前就在Linux上使用了相同的选项,我可以像在Linux上一样运行该图像并使用它:
$ docker run --rm -it open-adventure:podman /bin/bashssh-keygen: generating new host keys: RSA1 RSA DSA ECDSA ED25519
image完全兼容。 事实上,podman使用的一些库也是docker的一部分。
在我们开始之前,请快速了解容器架构。 docker在Linux上作为守护进程运行。 这会产生一定的开销,并且还需要任何想要构建容器映像的人具有root访问权限。 这可能会产生安全风险,尤其是当用户知道docker run命令的--privileged选项时。
守护进程也扼杀了容器社区的创新。 如果要更改容器的工作方式,则需要更改docker守护程序并将这些更改推送到上游。 没有守护进程,容器基础结构更加模块化,更容易进行更改。 podman的无守护进程架构更加灵活和安全。
这是对podman的快速概述。 正如您所料,它是完全开源的,请查看podman.io以获取文档,演示文稿,当然还有源代码。 我们建议您在Linux系统上安装该工具并使用它。 您可以从我的quay.io帐户中提取我刚建立的容器图像,并使用它来播放Colossal Cave Adventure。
目录 返回
首页