首页 > 解决方案 > Dockerfile 使用 RHEL8 UBI 镜像注册订阅

问题描述

ubi-8-codeready-builder我需要访问 ubi-8 ( )上 CodeReady 存储库中的几个包。除非我使用 RHEL 订阅,否则我似乎无法访问这些软件包。

构建向 RHEL 订阅注册的 RHEL8 UBI 映像的标准做法是什么?您如何为此构建 Dockerfile?

标签: dockerfilerhel8

解决方案


一种解决方案是将 USERNAME 和 PASSWORD 传递到 Dockerfile。
然后使用 args 注册订阅并启用 CodeReady,如下面的 Dockerfile 所示。

# Basing the build image on RHEL UBI image.
# See `docker search registry.access.redhat.com/ubi` 
FROM registry.access.redhat.com/ubi8/ubi:8.1

ARG USERNAME
ARG PASSWORD

# CodeReady contains packages required for develpers (i.e. imake)
# Must register system using RHEL subscription in order to access these packages
RUN subscription-manager register --username ${USERNAME} --password ${PASSWORD} \
  && yum repolist \
  && subscription-manager attach --auto \
  && subscription-manager repos --enable=codeready-builder-for-rhel-8-x86_64-rpms \
  && yum repolist

然后我可以将 USERNAME 和 PASSWORD 作为变量存储在密码文件中(密码应该添加到 .gitignore 中,这样它就不会被推送到任何中央存储库)并调用 docker build 如下:

#!/bin/sh
source passwords

docker build \
  -t my-image:v1 \
  --build-arg USERNAME=${USERNAME} \
  --build-arg PASSWORD=${PASSWORD} \
  .

注意:需要注意的一件事是,每次构建映像时,您都会将映像注册到 RedHat。我不完全确定,但我会假设在某些时候它可能会达到注册系统数量的某个限制。


推荐阅读