18.9. 在 Podman 容器内构建容器

您可以使用 Podman 在容器中运行容器。本例演示了如何使用 Podman 在此容器内构建并运行另一个容器。容器将运行"Moon-buggy",这是一个基于文本的简单游戏。

先决条件

  • container-tools 元数据包已安装。
  • 登陆到 registry.redhat.io 注册表:

    # podman login registry.redhat.io

流程

  1. 根据 registry.redhat.io/rhel9/podman 镜像运行容器:

    # podman run --privileged --name podman_container -it \
      registry.redhat.io/rhel9/podman /bin/bash
    • 根据 registry.redhat.io/rhel9/podman 镜像,运行名为 podman_container 的 outer 容器。
    • --it 选项指定您要在容器内运行交互式 bash shell。
    • --privileged 选项禁用将容器与主机隔离的安全功能。
  2. podman_container 容器中创建一个 Containerfile

    # vi Containerfile
    FROM registry.access.redhat.com/ubi9/ubi
    RUN dnf install -y https://dl.fedoraproject.org/pub/epel/epel-release-latest-8.noarch.rpm
    RUN dnf -y install moon-buggy && dnf clean all
    CMD ["/usr/bin/moon-buggy"]

    Containerfile 中的命令会导致以下构建命令:

    • registry.access.redhat.com/ubi9/ubi 镜像构建容器。
    • 安装 epel-release-latest-8.noarch.rpm 软件包。
    • 安装 moon-buggy 软件包。
    • 设置容器命令。
  3. 使用 Containerfile 构建名为 moon-buggy 的新容器镜像:

    # podman build -t moon-buggy .
  4. 可选:列出所有镜像:

    # podman images
    REPOSITORY                  TAG      IMAGE ID      CREATED        SIZE
    localhost/moon-buggy  latest  c97c58abb564  13 seconds ago  1.67 GB
    registry.access.redhat.com/ubi9/ubi latest 4199acc83c6a  132seconds ago 213 MB
  5. 运行一个基于 moon-buggy 容器的新容器:

    # podman run -it --name moon moon-buggy
  6. 可选:标记 moon-buggy 镜像:

    # podman tag moon-buggy registry.example.com/moon-buggy
  7. 可选:将 moon-buggy 镜像推送到 registry:

    # podman push registry.example.com/moon-buggy