第 6 章 使用 Buildah 自定义镜像构建


使用 OpenShift Container Platform 4.2 时,主机节点上不会出现 Docker 套接字。这意味着,不能保证自定义构建的 mount docker socket 选项会提供可在自定义构建镜像中使用的可访问 Docker 套接字。

如果您需要此功能来构建和推送镜像,请将 Buildah 工具添加到自定义构建镜像中,并在自定义构建逻辑中使用它来构建并推送镜像。以下是如何使用 Buildah 运行自定义构建的示例。

注意

使用自定义构建策略需要普通用户默认情况下不具备的权限,因为它允许用户在集群上运行的特权容器内执行任意代码。此级别的访问权限可被用来进行可能对集群造成损害的操作,因此应仅授权给信任的用户。

先决条件

6.1. 创建自定义构建工件

您必须创建要用作自定义构建镜像的镜像。

流程

  1. 从空目录着手,使用以下内容创建名为 Dockerfile 的文件:

    FROM docker.io/centos:7
    RUN yum install -y buildah
    # For simplicity, /tmp/build contains the inputs we’ll be building when we
    # run this custom builder image. Normally the custom builder image would
    # fetch this content from some location at build time. (e.g. via git clone).
    ADD Dockerfile.sample /tmp/input/Dockerfile
    ADD build.sh /usr/bin
    RUN chmod a+x /usr/bin/build.sh
    # /usr/bin/build.sh contains the actual custom build logic that will be executed when
    # this custom builder image is executed.
    ENTRYPOINT ["/usr/bin/build.sh"]
  2. 在同一目录中,创建名为 Dockerfile.sample 的文件。此文件将包含在自定义构建镜像中,并且定义将由自定义构建生成的镜像:

    FROM docker.io/centos:7
    RUN touch /tmp/built
  3. 在同一目录中,创建名为 build.sh 的文件。此文件包含自定义生成运行时将要执行的逻辑:

    #!/bin/sh
    # Note that in this case the build inputs are part of the custom builder image, but normally this
    # would be retrieved from an external source.
    cd /tmp/input
    # OUTPUT_REGISTRY and OUTPUT_IMAGE are env variables provided by the custom
    # build framework
    TAG="${OUTPUT_REGISTRY}/${OUTPUT_IMAGE}"
    
    
    # performs the build of the new image defined by Dockerfile.sample
    buildah --storage-driver vfs bud --isolation chroot -t ${TAG} .
    
    
    # buildah requires a slight modification to the push secret provided by the service
    # account in order to use it for pushing the image
    cp /var/run/secrets/openshift.io/push/.dockercfg /tmp
    (echo "{ \"auths\": " ; cat /var/run/secrets/openshift.io/push/.dockercfg ; echo "}") > /tmp/.dockercfg
    
    
    # push the new image to the target for the build
    buildah --storage-driver vfs push --tls-verify=false --authfile /tmp/.dockercfg ${TAG}
Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

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

让开源更具包容性

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

關於紅帽

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

© 2024 Red Hat, Inc.