2.4.4 JDKコンテナベースイメージの作成
このコンテナベースイメージは、トライアル版の場合、または通常版のユーザ責務のコンテナイメージでuCosminexus Application Runtime with Java for Spring Bootを導入しない場合だけ作成します。
JDKコンテナベースイメージは、uCosminexus Application Runtime with Java for Spring Bootを導入しないユーザ責務のコンテナイメージのベースイメージとして使用します。JDKのインストール部分を共通のベースイメージとして作成することで、各種コンテナイメージのContainerfileの記述量の軽減、およびビルドした各種コンテナイメージのサイズを低減できるメリットがあります。
JDKコンテナベースイメージの作成方法について説明します。
(1) Containerfileの作成
「4.3.2 JDKコンテナベースイメージ」に記載されている要件を満たすように、JDKコンテナベースイメージをビルドするためのContainerfileを作成してください。
Containerfileの記述例を次に示します。
■通常版の場合
FROM registry.access.redhat.com/ubi8/ubi-minimal:8.8-860 …1
RUN microdnf install \ …2
-y \
--setopt=install_weak_deps=0 \
--nodocs \
java-1.8.0-openjdk-headless \
curl-7.61.1 \
jq-1.6 \
&& microdnf clean all \
&& rm -rf /var/cache/dnf/* …3
USER 1001:0 …4
WORKDIR /deployments記述例の番号1〜4は、説明の番号1.〜4.と対応しています。
<説明>
-
コンテナベースイメージとしてUBI 8の任意のベースイメージを指定します。この例では、「Red Hat Universal Base Image 8 Minimal 8.8」を使用しています。
-
前提RPMパッケージをインストールします。この例では、Java SE 8準拠のJDKとして「OpenJDK 8」を使用しています。
-
アプリケーション配置用ディレクトリを作成します。
-
任意のコンテナ実行ユーザ・グループを指定します。
■トライアル版の場合
FROM quay.io/almalinuxorg/8-minimal:8.8 …1
RUN microdnf install \ …2
-y \
--setopt=install_weak_deps=0 \
--nodocs \
java-1.8.0-openjdk-headless \
curl-7.61.1 \
jq-1.6 \
&& microdnf clean all \ …3
&& rm -rf /var/cache/dnf/* …4
USER 1001:0
WORKDIR /deployments記述例の番号1〜4は、説明の番号1.〜4.と対応しています。
<説明>
-
コンテナベースイメージとしてAlmalinux 8 Minimal 8.8を指定します。
-
前提RPMパッケージをインストールします。この例では、Java SE 8準拠のJDKとして「OpenJDK 8」を使用しています。
-
アプリケーション配置用ディレクトリを作成します。
-
任意のコンテナ実行ユーザ・グループを指定します。
- ヒント
-
Red Hat OpenShift Container Platformで実行する場合のファイルのパーミッション設定
Red Hat OpenShift Container Platformには、SCC(Security Context Constraints)と呼ばれる、Podのパーミッションを制御する機能があります。このSCCのデフォルトの設定である「restricted」では、PodのKubernetesマニフェストでrunAsUserフィールドによるコンテナ起動ユーザが未設定の場合、コンテナイメージビルド時に設定したユーザ・グループを使用しないで、一定範囲内のランダムなUID(非root)とGID「0」(root)でコンテナを実行します。
このため、Red Hat OpenShift Container PlatformのSCCのrestricted設定で動作可能なコンテナイメージを作成する際は、配置するファイルのグループに「0」(root)を設定し、パーミッションにはオーナーの権限に加えてグループの権限も付与することを推奨します。
(2) Containerfileと資材の配置
次の表に示すとおり、Containerfileと資材をコンテナイメージビルド環境に配置してください。
|
ファイル/ディレクトリ構成 |
作成・提供元 |
備考 |
|
|---|---|---|---|
|
<コンテナイメージビルド作業ディレクトリ>/ |
ユーザ |
− |
|
|
Containerfile |
ユーザ |
− |
|
(3) コンテナイメージのビルド
Containerfileを使用して、コンテナイメージをビルドします。
JDKコンテナベースイメージのビルドのコマンドを次に示します。
cd <コンテナイメージビルド作業ディレクトリ>/ docker△build△-f△./Containerfile△-t△<コンテナレジストリ>/[<namespace>/]<JDKコンテナベースイメージのユーザ任意のイメージ名>:<ユーザ任意のタグ名>△.
(凡例)△:半角スペース1文字
<実行例>
cd build/ docker build -f ./Containerfile -t myregistry.example.com/myproject/jdk:V.R.S※ .
この例では、JDKコンテナベースイメージのイメージ名・タグ名を「jdk:V.R.S※」としています。
- 注※
-
V.R.Sは使用するHMP-PCTOのバージョンに合わせて読み替えてください。
(4) コンテナイメージの登録
ビルドしたJDKコンテナベースイメージを、Kubernetesクラスタで使用するコンテナレジストリにdocker pushコマンドなどで登録してください。
インターネット接続のない閉塞環境の場合は、ローカルのリポジトリ・レジストリなどを使用したり、コンテナイメージビルド環境でエクスポートしたコンテナイメージをKubernetesクラスタの各ワーカーノードにインポートしたりするなどの方法で対応してください。