https://raw.githubusercontent.com/containers/podman/main/logo/podman-logo.png

引言

Containers 简化应用程序及其所有依赖项和默认配置文件的生产、分发、可发现性和使用。用户使用一个或两个命令来测试、驱动或部署新的应用程序,而不是遵循安装说明页面。下面是如何找到你的第一个 Container Image ::

podman search busybox

输出::

INDEX       NAME                                DESCRIPTION                                       STARS   OFFICIAL   AUTOMATED
docker.io   docker.io/library/busybox           Busybox base image.                               1882    [OK]
docker.io   docker.io/radial/busyboxplus        Full-chain, Internet enabled, busybox made f...   30                 [OK]
docker.io   docker.io/yauritux/busybox-curl     Busybox with CURL                                 8
...

前面的命令返回了DockerHub上公开可用的容器镜像的列表。这些容器镜像很容易使用,但质量和维护水平不同。让我们使用列出的第一个,因为它似乎维护得很好。

要运行Busybox容器镜像,只需一条命令::

podman run -it docker.io/library/busybox

输出::

/ #

您可以查看Busybox容器一段时间,但很快就会发现运行带有几个Linux实用程序的小型容器提供的价值有限,因此退出::

exit

有一句老话说:“没有人仅仅为了运行操作系统而运行操作系统”,对于容器也是如此。在操作系统或容器上运行的工作负载才是有趣和有价值的。

有时,我们可以为我们正在寻找的确切工作负载找到一个公开可用的容器映像,并且它已经按照我们想要的方式进行了打包。但是,通常情况下,我们想要添加、删除或定制一些东西。它可以像安全性或性能的配置设置一样简单,也可以像添加复杂的工作负载一样复杂。无论采用哪种方式,容器都可以相当容易地进行我们需要的更改。

容器图像实际上不是图像,它们是通常由多个层组成的存储库。通过使用容器文件(Dockerfile),可以轻松地添加、保存这些层并与其他人共享。这个文件通常包含构建新容器映像所需的所有指令,并且可以很容易地使用GitHub等工具与其他人公开共享。

以下是如何使用由Nginx维护并在GitHub::中发布的Dockerfile在Debian基本映像上构建Nginx Web服务器的示例:

podman build -t nginx https://git.io/Jf8ol

一旦映像构建完成,就可以很容易地从本地缓存运行新映像:

podman run -d -p 8080:80 nginx
curl localhost:8080

输出::

...
<p><em>Thank you for using nginx.</em></p>
...

建立新的形象是很棒的,但与他人分享我们的工作让他们审查我们的工作,批评我们是如何建立它们的,并提供改进的版本。我们新构建的Nginx图像可以在quay.io或docker.io上发布,与世界分享。运行Nginx应用程序所需的一切都在容器镜像中提供。其他人可以很容易地把它拆下来使用,或者对它进行改进。

标准化容器图像和 Container Registries 通过简单的消费实现新的协作水平。这种简单的消费模式之所以成为可能,是因为每个主要的容器引擎和注册服务器都使用Open Containers Initiative (OCI) 格式化。这允许用户在他们想要的任何地方查找、运行、构建、共享和部署容器。Podman和其他人 Container Engines 如 CRI-O一样,Docker或Containerd可以从docker.io、quay.io、本地注册表甚至云提供商提供的注册表创建和使用容器镜像。OCI图像格式通过单一标准促进了这一生态系统。

例如,如果我们想要在quay.io上分享我们新构建的Nginx容器镜像,这很容易。首次登录码头::

podman login quay.io

输入::

Username: USERNAME
Password: ********
Login Succeeded!

接下来,标记图像,以便我们可以将其推送到我们的用户帐户::

podman tag localhost/nginx quay.io/USERNAME/nginx

最后,推送图像::

podman push quay.io/USERNAME/nginx

输出::

Getting image source signatures
Copying blob 38c40d6c2c85 done
Copying blob fee76a531659 done
Copying blob c2adabaecedb done
Copying config 7f3589c0b8 done
Writing manifest to image destination
Copying config 7f3589c0b8 done
Writing manifest to image destination
Storing signatures

请注意,我们将四个层推送到注册表,现在其他人可以共享它。快速浏览::

podman inspect quay.io/USERNAME/nginx

输出::

[
    {
        "Id": "7f3589c0b8849a9e1ff52ceb0fcea2390e2731db9d1a7358c2f5fad216a48263",
        "Digest": "sha256:7822b5ba4c2eaabdd0ff3812277cfafa8a25527d1e234be028ed381a43ad5498",
        "RepoTags": [
            "quay.io/USERNAME/nginx:latest",
...

总而言之,Podman使查找、运行、构建和共享容器变得很容易。

  • 查找:无论是在dockerhub.io或quay.io(内部注册服务器)上查找容器,还是直接从供应商那里查找容器,有几个 podman search ,以及 podman pull 命令让这一切变得简单

  • 运行:您可以轻松地使用运行整个应用程序所需的所有内容来使用预构建的映像,或者使用 podman run 命令

  • 构建:通过小调整或大修即可轻松创建新的层 podman build

  • 分享:Podman允许您将新建的容器推送到任何您想要的位置,只需一次 podman push 命令

有关用例的更多说明,请查看我们的 教程 佩奇。