2.4. 使用 podman build 构建自定义镜像


从 RHEL 9.6 开始,您可以继续使用 RHEL 镜像构建器创建边缘安装镜像。您还可以使用 RHEL 的镜像模式来编写容器镜像,并为部署创建磁盘镜像。如果要继续使用 RHEL 镜像构建器,请参阅 制作、安装和管理 RHEL for Edge 镜像

要将镜像模式用于 RHEL 创建新磁盘镜像,请按照以下步骤执行:

2.4.1. 使用镜像模式创建 9.6 RHEL for Edge 镜像

要为边缘主机构建镜像模式 RHEL,请使用说明创建一个 Containerfile。然后,使用 bootc-image-builder 使用 anaconda ISO 安装创建的边缘主机。

先决条件

  • 您已在主机机器上安装了 Podman。
  • 您有运行 bootc-image-builder 工具的 root 访问权限,并在 --privileged 模式下运行容器,以构建镜像。

流程

  1. 创建 Containerfile,例如:

    $ cat Containerfile
    FROM registry.redhat.io/rhel9/rhel-bootc:9.6
    
    # Packages
    RUN dnf install -y zsh && dnf clean all
    
    # Group install
    RUN dnf group -y install "Development Tools"
    
    # Hostname
    RUN echo "rock.paper.scissor" > /etc/hostname
    
    # Kernel
    RUN mkdir -p /usr/lib/bootc/kargs.d
    RUN cat <<EOF >> /usr/lib/bootc/kargs.d/console.toml
    kargs = ["console=ttyS0,114800n8","kernel-debug"]
    match-architectures = ["x86_64"]
    EOF
    
    # Subscription-manager
    RUN dnf install subscription-manager
    
    # RPM config
    RUN mkdir -p /etc/pki/rpm-gpg/
    COPY <host_path>/gpg_key /etc/pki/rpm-gpg/gpg_key
    
    # Timezones
    RUN cat <<EOF >> /etc/localtime
    Asia/Bangkok
    EOF
    
    
    # Locale
    RUN cat <<EOF >> /etc/locale.conf
    LANG="en_US.UTF-8"
    EOF && \
    cat <<EOF >> /etc/vconsole.conf
    KEYMAP=us
    EOF
    
    
    # firewall
    RUN dnf install -y firewalld && \
        mkdir -p /etc/firewalld/zones
    RUN cat <<EOF >> /etc/firewalld/zones/customzone.xml
    <?xml version="1.0" encoding="utf-8"?>
    <zone>
        <short>Customzone</short>
        <description>Custom firewall rules for the container.</description>
    
        <!-- Allowed services -->
        <service name="ftp"/>
        <service name="ntp"/>
        <service name="dhcp"/>
    
        <!-- Blocked services (not explicitly listed) -->
        <!-- Removing telnet explicitly is unnecessary if it is not included -->
    
        <!-- Open specific ports -->
        <port protocol="tcp" port="22"/>
        <port protocol="tcp" port="80"/>
        <port protocol="tcp" port="53"/>
        <port protocol="udp" port="53"/>
        <port protocol="tcp" port="30000-32767"/>
        <port protocol="udp" port="30000-32767"/>
    </zone>
    EOF
    RUN firewall-offline-cmd --set-default-zone=customzone
    
    # systemd services
    RUN systemctl enable sshd
    
    #ignition
    RUN mkdir -p /usr/lib/bootc/kargs.d && \
    cat <<EOF >> /usr/lib/bootc/kargs.d/console.toml
    kargs = ["ignition.config.url=http://192.168.122.1/fiot.ign","rd.neednet=1"]
    EOF
    
    #fdo
    RUN dnf install -y fdo-init fdo-client && \
    systemctl enable fdo-client-linuxapp.service
    
    #Repositories
    RUN mkdir -p /etc/yum.repos.d
    COPY custom.repo /etc/yum.repos.d/custom.repo
    
    #fips
    RUN mkdir -p /usr/lib/bootc/kargs.d && \
    cat <<EOF >>  /usr/lib/bootc/kargs.d/01-fips.toml
    kargs = ["fips=1"]
    EOF
    RUN dnf install -y crypto-policies-scripts && update-crypto-policies --no-reload --set FIPS
    Copy to Clipboard
  2. 使用当前目录中的 Containerfile 构建 <image> 镜像:

    $ podman build -t quay.io/<namespace>/<image>:<tag> .
    Copy to Clipboard

验证

  • 列出所有镜像:

    $ podman images
    REPOSITORY                                  TAG      IMAGE ID       CREATED              SIZE
    quay.io/<namespace>/<image>                          latest   b28cd00741b3   About a minute ago   2.1 GB
    Copy to Clipboard

2.4.2. 使用镜像模式创建 RHEL 10 for Edge 镜像

从 RHEL 10 及之后的版本中,若要创建新的 RHEL for Edge 镜像安装,请使用 bootc,因为 RHEL 镜像构建器不再支持边缘工件。

注意

并非所有可用的 RHEL 镜像构建器工件都包括在镜像模式中。这意味着您无法使用 bootc-image-builder 创建某些镜像类型。

  • 值得注意的是,simplified-installer 不再存在。相反,使用 bootc-image-builder Anaconda ISO 进行工作流,如 FDO。

先决条件

  • 您已在主机机器上安装了 Podman。
  • 您有运行 bootc-image-builder 工具的 root 访问权限,并在 --privileged 模式下运行容器,以构建镜像。

流程

  1. 创建 Containerfile。以下示例包含多个可以用作示例的自定义,如果它不适合您的要求,可以删除它。

    $ cat Containerfile
    FROM registry.redhat.io/rhel10/rhel-bootc:10.0
    
    # Packages
    RUN dnf install -y zsh && dnf clean all
    
    # Group install
    RUN dnf group -y install "Development Tools"
    
    # Kernel
    RUN mkdir -p /usr/lib/bootc/kargs.d
    RUN cat <<EOF >> /usr/lib/bootc/kargs.d/console.toml
    kargs = ["console=ttyS0,114800n8","kernel-debug"]
    match-architectures = ["x86_64"]
    EOF
    
    # Subscription-manager
    COPY ./rhsm.conf /etc/rhsm/rhsm.conf
    
    # RPM config
    RUN mkdir -p /etc/pki/rpm-gpg/
    COPY <host_path>/gpg_key /etc/pki/rpm-gpg//gpg_key
    
    # Additional groups
    RUN groupadd -g 1001 widget
    
    # Timezones
    RUN ln -sf /usr/share/zoneinfo/Asia/Bangkok /etc/localtime
    
    # Locale
    RUN cat <<EOF >> /etc/locale.conf
    LANG="en_US.UTF-8"
    EOF && \
    cat <<EOF >> /etc/vconsole.conf
    KEYMAP=us
    EOF
    
    
    # firewall
    RUN dnf install -y firewalld && \
        dnf clean all && \
        firewall-offline-cmd --new-zone=customzone && \
        firewall-offline-cmd --zone=customzone --set-description="Custom firewall rules for the container" && \
        firewall-offline-cmd --zone=customzone --add-service=ftp && \
        firewall-offline-cmd --zone=customzone --add-service=ntp && \
        firewall-offline-cmd --zone=customzone --add-service=dhcp && \
        firewall-offline-cmd --zone=customzone --add-port=22/tcp && \
        firewall-offline-cmd --zone=customzone --add-port=80/tcp && \
        firewall-offline-cmd --zone=customzone --add-port=53/tcp && \
        firewall-offline-cmd --zone=customzone --add-port=53/udp && \
        firewall-offline-cmd --zone=customzone --add-port=30000-32767/tcp && \
        firewall-offline-cmd --zone=customzone --add-port=30000-32767/udp && \
        firewall-offline-cmd --set-default-zone=customzone
    
    # systemd services
    RUN systemctl enable httpd sshd && \
    systemctl disable telnetd && \
    systemctl mask rcpbind
    Copy to Clipboard
  2. 使用当前目录中的 Containerfile 构建 <image> 镜像:

    $ podman build -t quay.io/<namespace>/<image>:<tag> .
    Copy to Clipboard

验证

  • 列出所有镜像:

    $ podman images
    REPOSITORY                                  TAG      IMAGE ID       CREATED              SIZE
    quay.io/<namespace>/<image>                           latest   b28cd00741b3   About a minute ago   2.1 GB
    Copy to Clipboard
返回顶部
Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

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

让开源更具包容性

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

關於紅帽

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

Theme

© 2025 Red Hat