第 18 章 在容器中运行 Skopeo、Buildah 和 Podman
您可以在容器中运行 Skopeo、Buildah 和 Podman。
使用 Skopeo,您可以检查远程注册中心中的镜像,而无需下载整个镜像及其所有层。您还可以使用 Skopeo 来复制镜像、签名镜像、同步镜像以及在不同格式和层压缩间转换镜像。
Buildah 处理对 OCI 容器镜像的构建。使用 Buildah,您可以创建一个可运行的容器,可以从头开始,也可以使用一个镜像作为起点。您可以从正常工作的容器或使用 Containerfile
中的指令来创建镜像。您可以挂载和卸载正常工作容器的根文件系统。
借助 Podman,您可以管理容器和镜像、挂载到这些容器的卷,以及容器组构成的 pod。Podman 是基于容器生命周期管理的 libpod
库。libpod
库提供用于管理容器、Pod、容器镜像和卷的 API。
在容器中运行 Buildah、Skopeo 和 Podman 的原因:
CI/CD 系统 :
- Podman 和 Skopeo :您可以在 Kubernetes 中运行 CI/CD 系统,或者使用 OpenShift 来构建容器镜像,并在不同的容器 registry 之间分发这些镜像。要将 Skopeo 集成到 Kubernetes 工作流中,您需要在容器中运行它。
-
Buildah :您希望在 Kubernetes 或 OpenShift CI/CD 系统中构建持续构建镜像的 OCI/container 镜像。在以前的版本中,人们使用 Docker 套接字连接到容器引擎,并执行
docker build
命令。这等同于为系统提供 root 访问权限而无需一个不安全的密码。因此,Red Hatrecommends 在容器中使用 Buildah。
不同的版本 :
- All:您在主机上运行旧的操作系统,但您想要运行最新版本的 Skopeo、Buildah 或 Podman。解决方法是在容器中运行容器工具。例如,这可用于在 Red Hat Enterprise Linux 7 容器主机上运行 Red Hat Enterprise Linux 8 中提供的容器工具的最新版本,而无需原生访问最新版本。
HPC 环境 :
- All:HPC 环境中的一个常见的限制是不允许非 root 用户在主机上安装软件包。当您在容器中运行 Skopeo、Buildah 或 Podman 时,您可以以非 root 用户身份执行这些特定的任务。
18.1. 在容器中运行 Skopeo
您可以使用 Skopeo 检查远程容器镜像。在容器中运行 Skopeo 意味着容器根文件系统与主机 root 文件系统分离。要在主机和容器间共享或复制文件,您必须挂载文件和目录。
先决条件
-
container-tools
元数据包已安装。
流程
登录到 registry.redhat.io 注册中心:
$ podman login registry.redhat.io Username: myuser@mycompany.com Password: <password> Login Succeeded!
获取
registry.redhat.io/rhel9/skopeo
容器镜像:$ podman pull registry.redhat.io/rhel9/skopeo
使用 Skopeo 检查远程容器镜像
registry.access.redhat.com/ubi9/ubi
:$ podman run --rm registry.redhat.io/rhel9/skopeo \ skopeo inspect docker://registry.access.redhat.com/ubi9/ubi { "Name": "registry.access.redhat.com/ubi9/ubi", ... "Labels": { "architecture": "x86_64", ... "name": "ubi9", ... "summary": "Provides the latest release of Red Hat Universal Base Image 9.", "url": "https://access.redhat.com/containers/#/registry.access.redhat.com/ubi9/images/8.2-347", ... }, "Architecture": "amd64", "Os": "linux", "Layers": [ ... ], "Env": [ "PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin", "container=oci" ] }
--rm
选项会在容器退出后删除registry.redhat.io/rhel9/skopeo
镜像。
其他资源