13.7. 使用 Podman 自动运行容器和 pod

在将生成的 YAML 文件传送到 Kubernetes 或 OpenShift 环境前,您可以使用 podman play kube 命令测试本地系统中的 pod 和容器的创建。

podman play kube 命令还可使用类似 docker compose 命令的 YAML 文件自动构建并运行带有 pod 中多个容器的多个 pod。如果满足以下条件,会自动构建镜像:

  1. 存在一个名称与 YAML 文件中所用镜像相同的目录
  2. 该目录包含一个 Containerfile

先决条件

  • container-tools 元数据包已安装。
  • 名为 wordpresspod 的 pod 已创建。详情请参阅使用 Podman 手动运行容器和 pod 一节。
  • 已生成 YAML 文件。详情请参阅使用 Podman 生成 YAML 文件一节。
  • 要从头重复整个场景,请删除本地存储的镜像:

    $ podman rmi localhost/mariadb-conf
    $ podman rmi docker.io/library/wordpress
    $ podman rmi docker.io/library/mysql

流程

  1. 使用 wordpress.yaml 文件创建 wordpress pod:

    $ podman play kube wordpress.yaml
    STEP 1/2: FROM docker.io/library/mariadb
    STEP 2/2: COPY my.cnf /etc/mysql/my.cnf
    COMMIT localhost/mariadb-conf:latest
    --> 428832c45d0
    Successfully tagged localhost/mariadb-conf:latest
    428832c45d07d78bb9cb34e0296a7dc205026c2fe4d636c54912c3d6bab7f399
    Trying to pull docker.io/library/wordpress:latest...
    Getting image source signatures
    Copying blob 99c3c1c4d556 done
    ...
    Storing signatures
    Pod:
    3e391d091d190756e655219a34de55583eed3ef59470aadd214c1fc48cae92ac
    Containers:
    6c59ebe968467d7fdb961c74a175c88cb5257fed7fb3d375c002899ea855ae1f
    29717878452ff56299531f79832723d3a620a403f4a996090ea987233df0bc3d

    podman play kube 命令:

    • 根据 docker.io/library/mariadb 镜像,自动构建 localhost/mariadb-conf:latest 镜像。
    • 拉取 docker.io/library/wordpress:latest 镜像。
    • 创建名为 wordpresspod 的 pod,它有两个容器,名为 wordpresspod-mydbwordpresspod-myweb
  2. 列出所有容器和 pod:

    $ podman ps --pod -a
    CONTAINER ID  IMAGE                               COMMAND               CREATED        STATUS                    PORTS                 NAMES               POD ID        PODNAME
    a1dbf7b5606c  k8s.gcr.io/pause:3.5                                      3 minutes ago  Up 2 minutes ago          0.0.0.0:8080->80/tcp  3e391d091d19-infra  3e391d091d19  wordpresspod
    6c59ebe96846  localhost/mariadb-conf:latest       mariadbd              2 minutes ago  Exited (1) 2 minutes ago  0.0.0.0:8080->80/tcp  wordpresspod-mydb   3e391d091d19  wordpresspod
    29717878452f  docker.io/library/wordpress:latest  apache2-foregroun...  2 minutes ago  Up 2 minutes ago          0.0.0.0:8080->80/tcp  wordpresspod-myweb  3e391d091d19  wordpresspod

验证

  • 验证 Pod 是否在运行:访问 http://localhost:8080/wp-admin/install.php 页面或使用 curl 命令:

    $ curl http://localhost:8080/wp-admin/install.php
    <!DOCTYPE html>
    <html xml:lang="en-US">
    <head>
    ...
    </head>
    <body class="wp-core-ui">
    <p id="logo">WordPress</p>
        <h1>Welcome</h1>
    ...

其他资源