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 version
podman 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 images
REPOSITORY                                         TAG                 IMAGE ID            CREATED              SIZE
localhost/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/bash
ssh-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/bash
ssh-keygen: generating new host keys: RSA1 RSA DSA ECDSA ED25519 
image完全兼容。 事实上,podman使用的一些库也是docker的一部分。
在我们开始之前,请快速了解容器架构。 docker在Linux上作为守护进程运行。 这会产生一定的开销,并且还需要任何想要构建容器映像的人具有root访问权限。 这可能会产生安全风险,尤其是当用户知道docker run命令的--privileged选项时。
守护进程也扼杀了容器社区的创新。 如果要更改容器的工作方式,则需要更改docker守护程序并将这些更改推送到上游。 没有守护进程,容器基础结构更加模块化,更容易进行更改。 podman的无守护进程架构更加灵活和安全。

 PodmanContainer Tools

这是对podman的快速概述。 正如您所料,它是完全开源的,请查看podman.io以获取文档,演示文稿,当然还有源代码。 我们建议您在Linux系统上安装该工具并使用它。 您可以从我的quay.io帐户中提取我刚建立的容器图像,并使用它来播放Colossal Cave Adventure。
posted @ 2019-05-22 14:41  mashaoli  阅读(14120)  评论(0编辑  收藏  举报