跳到内容跳到页面导航:上一页 [access key p]/下一页 [access key n]
documentation.suse.com / 容器指南 / Buildah 概述
适用范围 容器指南

14 Buildah 概述

Buildah 是用于构建符合 OCI 标准的容器映像的工具。Buildah 可处理以下任务:

  • 从头开始或者基于现有映像创建容器。

  • 基于工作容器或者通过 Dockerfile 创建映像。

  • 构建 OCI 或 Docker 开源引擎映像格式的映像。

  • 挂载工作容器的根文件系统以进行操作。

  • 使用容器根文件系统的已更新内容作为文件系统层来创建新映像。

  • 删除工作容器或映像,以及重命名本地容器。

与 Docker 开源引擎相比,Buildah 具有以下优势:

  • 使用该工具可以挂载工作容器的文件系统,使之可供主机访问。

  • 通过使用 Buildah 子命令的脚本(而不是 Containerfile 或 Dockerfile)可以实现使用 Buildah 构建容器映像的过程的自动化。

  • 与 Podman 类似,Buildah 不需要运行守护程序,可由非特权用户使用。

  • 可以在不挂载 Docker 套接字的情况下在容器内部构建映像,这样可以提高安全性。

14.1 Podman 和 Buildah

Podman 和 Buildah 都可用于构建容器映像。虽然 Podman 可让用户使用 Dockerfile 构建映像,但 Buildah 提供的映像构建选项和功能更广泛。

14.2 Buildah 安装

要安装 Buildah,请运行命令 sudo zypper in buildah。运行命令 buildah --version 检查是否已成功安装 Buildah。

如果您已安装 Podman 并将其设置为在无 root 权限模式下使用,则无需进行进一步配置,就能在非特权环境中使用 Buildah。如果需要为 Buildah 启用无 root 权限模式,请运行以下命令:

> sudo usermod --add-subuids 100000-165535 --add-subgids 100000-165535 USER

此命令将为当前用户启用无 root 权限模式。运行该命令后,注销然后重新登录即可启用更改。

以上命令会在主机上定义一系列本地 UID,分配给容器中的用户的 UID 将映射到这些 UID。请注意,为不同用户定义的范围不得重叠。同样重要的是,这些范围不能重复使用任何现有本地用户或组的 UID。默认情况下,在 SLES 15 SP4 中使用 useradd 命令添加用户会自动分配 subUID 和 subGID 范围。

注意
注意:无 root 权限模式下的 Buildah

在无 root 权限模式下,Buildah 命令必须在用户的已修改用户名称空间中执行。要进入此用户名称空间,请运行命令 buildah unshare。否则,buildah mount 命令将会失败。

14.3 使用 Buildah 构建映像

Buildah 使用单独的命令来构建映像,而不使用包含指令的特殊文件。使用 Buildah 构建映像涉及以下步骤:

  • 运行基于指定映像的容器

  • 编辑容器(安装软件包、配置设置等)

  • 配置容器选项

  • 将所有更改提交到新映像中

虽然此过程可能包括其他步骤(例如,挂载并使用容器的文件系统),但基本的工作流程逻辑是相同的。

下面的示例可让您大致了解如何使用 Buildah 构建映像。

container=$(buildah from suse/sle15) 1
buildah run $container zypper up 2
buildah copy $container . /usr/src/example/ 3
buildah config --workingdir /usr/src/example $container 4
buildah config --port 8000 $container
buildah config --cmd "php -S 0.0.0.0:8000" $container
buildah config --label maintainer="Tux" $container 5
buildah config --label version="0.1" $container
buildah commit $container example 6
buildah rm $container 7

1

指定基于指定的映像(在本例中为 sle15)的容器(也称为工作容器)。

2

在刚刚创建的工作容器中运行命令。在此示例中,Buildah 将运行 zypper up 命令。

3

将文件和目录复制到容器中的指定位置。在此示例中,Buildah 将当前目录的全部内容复制到 /usr/src/example/

4

buildah config 命令指定容器选项。其中包括定义工作目录、公开端口以及在容器内部运行命令。

5

buildah config --label 命令用于向容器指派标签。标签包括 maintainerdescriptionversion 等。

6

通过提交所有修改基于工作容器创建映像。

7

删除工作容器。