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

引言

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

podman search docker.io/busybox

输出::

NAME                                         DESCRIPTION
docker.io/library/busybox                    Busybox base image.
docker.io/rancher/busybox
docker.io/openebs/busybox-client
docker.io/antrea/busybox
docker.io/hugegraph/busybox                  test image
...

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

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

podman run -it docker.io/library/busybox

输出::

/ #

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

exit

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

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

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

以下是如何从git存储库中的内容构建容器镜像的示例::

podman build -t hello https://github.com/containers/PodmanHello.git

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

podman run -it hello

输出::

!... Hello Podman World ...!

         .--"--.
       / -     - \
      / (O)   (O) \
   ~~~| -=(,Y,)=- |
    .---. /`  \   |~~
 ~/  o  o \~~~~.----. ~~
  | =(X)= |~  / (O (O) \
   ~~~~~~~  ~| =(Y_)=-  |
  ~~~~    ~~~|   U      |~~

Project:   https://github.com/containers/podman
Website:   https://podman.io
Desktop:   https://podman-desktop.io
Documents: https://docs.podman.io
YouTube:   https://youtube.com/@Podman
X/Twitter: @Podman_io
Mastodon:  @Podman_io@fosstodon.org

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

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

例如,如果我们想分享我们新建的 hello quay.io上的容器图像很简单。首次登录码头::

podman login quay.io

输入::

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

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

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

最后,推送图像::

podman push quay.io/USERNAME/hello

输出::

Getting image source signatures
Copying blob bf62b9b17289 done   |
Copying config 17a4bf5a30 done   |
Writing manifest to image destination

请注意,我们将一层推送到了我们的注册表,现在它可以供其他人共享。快速看看::

podman inspect quay.io/USERNAME/hello

输出::

[
    {
        "Id": "17a4bf5a301a374771ac66dd09c33d1d765af5265d20d6b4da7ac578381efd87",
        "Digest": "sha256:ee693991b0c8c8c12dfe0e90c25db1b73867e672478fd7a187a2fae31f72531a",
        "RepoTags": [
            "quay.io/USERNAME/hello:latest",
...

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

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

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

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

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

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