5.4. 构建容器


Buildah 是在 Red Hat Enterprise Linux 中构建容器的主要工具,您可以在 Podman 中使用它来管理和运行您构建的容器。

先决条件

  1. container-tools 元数据包已安装。

流程

  1. 安装容器工具:确保 RHEL 系统上已安装必要的容器工具。container-tools 模块提供 Buildah、Podman 和 Skopeo。

    $ sudo dnf install container-tools
    Copy to Clipboard Toggle word wrap
  2. 创建 Containerfile : Containerfile 定义构建容器镜像的说明。此文件指定基础镜像、要安装的任何软件、要应用的配置以及要运行的应用程序。例如:

    FROM registry.redhat.io/ubi10/ubi-minimal
    RUN microdnf -y update && microdnf -y install
    COPY index.html /var/www/html/
    EXPOSE 80
    CMD ["httpd", "-DFOREGROUND"]
    Copy to Clipboard Toggle word wrap
  3. 使用 Buildah 构建容器镜像:在进入包含容器文件的目录后,使用 buildah bud (或 podman build)构建镜像。

    $ cd /<path_to_container_file>
    
    $ buildah bud -t your_image_name:tag .
    Copy to Clipboard Toggle word wrap
    • your_image_name :您的镜像的名称。
    • 标签:镜像的标签 (如 latest、1.0)。
    • .: 表示 Containerfile 位于当前目录中。
  4. 运行容器:构建镜像后,您可以使用 podman run 命令从其中运行容器。

    $ podman run -d -p 8080:80 my-web-app
    Copy to Clipboard Toggle word wrap
    • -d :以分离模式(在后台)运行容器。
    • -p 8080:80: 将主机上的端口 8080 映射到容器内的端口 80。
    • my-web-app :要运行的镜像名称。

      容器构建中的 heredocs 语法

      您可以在 Containerfile 中使用 heredoc 语法,以及 Red Hat Enterprise Linux 基础镜像,确保启用 BuildKit。如果命令包含 heredoc 语法,则 Containerfile 会考虑下一行,直到行只包含 heredoc delimiter,作为同一命令的一部分。您可以使用 heredocs,直接在 Containerfile 中的 RUNCOPY 等指令中嵌入多行字符串。这对基于 RHEL 的镜像特别有用,因为它无需为简单的任务创建单独的脚本文件,从而提高了可读性和可维护性。

      例如,常见的用例在单个 RUN 指令中运行多个 shell 命令,以创建单个镜像层,避免 && \ 语法:

# syntax=container/containerfile:1.4
FROM registry.redhat.io/ubi10/ubi-minimal
# Use a heredoc to perform a multi-line RUN command:
RUN <<EOF
microdnf -y update
microdnf -y install nginx
microdnf clean all
echo "Nginx installed and packages updated"
EOF
Copy to Clipboard Toggle word wrap
  • RUN <<EOF: << 信号是 heredoc 的开头,EOF 是用户定义的分隔符。
  • <& lt;EOF 和最终 EOF 之间的行被视为 shell 执行的一个脚本。
  • 整个块是单个 RUN 指令,其效率更高且更易于阅读。
返回顶部
Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。 了解我们当前的更新.

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

Theme

© 2025 Red Hat