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

简介

容器简化了应用程序及其所有依赖项和默认配置文件的生产、分发、发现和使用。用户只需一两个命令即可试用或部署新应用程序,而无需遵循长篇的安装说明。以下是如何查找您的第一个容器镜像

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

有句老话说“没有人为了运行操作系统而运行操作系统”,这句话同样适用于容器。有趣且有价值的是在操作系统之上或容器中运行的工作负载。

有时,我们可以为我们所需的确切工作负载找到一个公开可用的容器镜像,并且它已经按照我们想要的方式打包好了。但是,更多情况下,总有些东西我们想要添加、移除或自定义。这可能像一个简单的安全或性能配置设置一样简单,也可能像添加一个复杂的工作负载一样复杂。无论哪种方式,容器都使得进行我们需要的更改变得相当容易。

容器镜像(Container Images)实际上不是镜像。它们是通常由多个层组成的仓库。通过使用 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.org.cn
Desktop:   https://desktop.podman.org.cn
Documents: https://docs.podman.org.cn
YouTube:   https://youtube.com/@Podman
X/Twitter: @Podman_io
Mastodon:  @Podman_io@fosstodon.org

构建新镜像是很棒的,但与他人分享我们的工作能让他们审查我们的工作,评论我们构建它们的方式,并提供改进的版本。我们新构建的 hello 镜像可以发布在 quay.io 或 docker.io 上,与全世界分享。运行 hello 应用程序所需的一切都已在容器镜像中提供。其他人可以轻松地拉取并使用它,或者对其进行改进。

容器镜像和容器仓库(Container Registries)的标准化通过简单的消费模式实现了一种新的协作水平。这种简单的消费模式之所以可能,是因为每个主流的容器引擎和仓库服务器都使用开放容器倡议(OCI)格式。这使得用户可以在任何他们想要的地方查找、运行、构建、共享和部署容器。Podman 和其他容器引擎,如 CRI-O、Docker 或 containerd,可以创建和使用来自 docker.io、quay.io、本地仓库甚至云提供商提供的仓库的容器镜像。OCI 镜像格式通过单一标准促进了这个生态系统。

例如,如果我们想在 quay.io 上分享我们新构建的 hello 容器镜像,这很容易。首先登录到 quay:

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 searchpodman pull 命令即可轻松完成。

  • 运行:使用 podman run 命令,可以轻松地使用包含运行整个应用程序所需一切的预构建镜像,或者从一个 Linux 发行版基础镜像开始。

  • 构建:使用 podman build,无论是创建带有微小调整的新层,还是进行重大修改,都非常容易。

  • 共享:Podman 让您可以通过一个 podman push 命令将您新构建的容器推送到任何您想要的地方。

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