コンテナ動作環境でGlassFishを利用する場合、GlassFishのコンテナイメージを作成します。
以下にdockerコマンドを利用してコンテナイメージを作成する例を説明します。
以降の操作はすべてrootユーザーで行うものとします。
インストール資材の準備
本製品の製品メディア(DVD-ROM)を作業ディレクトリー(/docker/work/)配下のディレクトリーにマウントしてください。
以下は、ディレクトリー"/docker/work/eap"を作成してマウントする例です。
# mkdir -p /docker/work/eap # mount -t iso9660 -r /dev/cdrom /docker/work/eap
インストールパラメーターファイルの作成
以下のようにGlassFishをインストールすることを指定したインストールパラメーターファイル(/docker/work/param.csv)を用意します。
以下の例では、運用ユーザーを一般ユーザー「eapuser」に指定しています。
<param.csv>
User,eapuser FN_GlassFish,Y
アプリケーション実行ファイル、セットアップに必要なスクリプトの配備
GlassFish上で起動させるアプリケーション実行ファイルを作業ディレクトリー(/docker/work/)に配備します。
今回はアプリケーション実行ファイルを"application.war"とします。
また、Dockerfile内でijsetupコマンドを実行するスクリプトexec_ijsetup.shを作業ディレクトリー(/docker/work/)に作成します。このスクリプトは、ijsetupコマンドを実行する際に設定が必要な環境変数ADMIN_PASSWORDの値をdocker inspectなどのコマンドで表示されないようにするために必要です。
exec_ijsetup.shは、以下のポイントに従い作成します。
ijsetupコマンドのオプションに--skippcmiを指定します。
asadminコマンドで必要なパスワードファイルを出力します。
例
exec_ijsetup.sh記述例
#!/bin/sh
export ADMIN_PASSWORD=<管理者パスワード>
echo AS_ADMIN_PASSWORD=${ADMIN_PASSWORD}>/home/eapuser/passwordfile.txt
/opt/FJSVeapf/glassfish/bin/ijsetup --skippcmi
ret=$?
export -n ADMIN_PASSWORD
exit $retDockerfileの作成
以下のポイントに従い、作業ディレクトリー(/docker/work/)にDockerfileを作成します。
Amazon Linux 2023 base container imageを利用する場合、インストールガイドに記載している基本ソフトウェアのパッケージに加えて、以下のパッケージのインストールが必要です。
findutils.x86_64
gzip.x86_64
perl-interpreter.x86_64
procps-ng.x86_64
tar.x86_64
util-linux.x86_64
util-linux-core.x86_64
which.x86_64
ijsetupコマンドは、「3. アプリケーション実行ファイル、セットアップに必要なスクリプトの配備」で作成したスクリプトから実行します。
運用ユーザーを一般ユーザーに変更する場合、useraddでユーザーを作成し、asadminコマンド実行前に、USER命令に1000を指定します。
RUN命令でasadminコマンドを実行することにより、アプリケーションの配備や設定変更を行います。
asadminコマンドを実行するためにDASを起動する場合、RUN命令が終了するとDASが停止するため、1つのRUN命令の中でasadminコマンドを&&で連結して実行ください。
GlassFish Serverインスタンスにアプリケーションを配備して運用する場合は、リポジトリーの同期化を行うために、アプリケーションの配備や設定変更の完了後に一度起動してください。
CMD命令には、container_glassfish_startを指定します。container_glassfish_startコマンドについては「11.2 container_glassfish_start」を参照してください。
「10.9.3 ネットワーク設定の定義項目」の「スキームマッピング」にX-Forwarded-ProtoなどのIngress/Routeが付与するリクエストヘッダ名を指定します。
サーバーログ、HTTPアクセスログをコンテナ外から参照できるようにする場合、以下の設定を変更します。本設定を行った場合、コンテナ内にサーバーログ、HTTPアクセスログは出力されなくなります。
「10.9.11 ロガーの定義項目」の「ログローテーションの有効化」を以下のように設定します。
org.glassfish.main.jul.handler.GlassFishLogHandler.rotation.enabled=false
「10.9.2 HTTPサービスの定義項目」の「ログローテーションの有効化」を以下のように設定します。
${clusterName_instanceName_configName}.http-service.access-log.rotation-enabled=false
サーバーログを標準エラー出力、HTTPアクセスログを標準出力にリダイレクトします。
例
Dockerfile記述例
# 本例ではベースイメージにRed Hat Universal Base Image 8 (Standard)を使用します。
FROM registry.access.redhat.com/ubi8/ubi:latest
# 必須ソフトウェアをインストールします。
# 本製品の「インストールガイド」に記載されている基本ソフトウェアのパッケージを参照しています。
# 必要に応じてトラブルシューティングに必要な基本ソフトウェアのパッケージもインストールしてください。
RUN /bin/yum -y install alsa-lib.x86_64 bzip2-libs.x86_64 freetype.x86_64 glibc.x86_64 \
libX11.x86_64 libXau.x86_64 libXext.x86_64 \
libXi.x86_64 libXrender.x86_64 \
libXtst.x86_64 libpng.x86_64 libxcb.x86_64 tar.x86_64 unzip.x86_64 && \
/bin/yum clean all -y;
# 運用ユーザーを一般ユーザーに変更する場合、ユーザーを追加します。
RUN useradd -u 1000 -d /home/eapuser -s /bin/bash eapuser
# 本製品のインストール作業
RUN mkdir work
COPY eap/ work/
COPY param.csv work/
RUN work/install.sh -s -f work/param.csv && \
rm -rf work/*
# アプリケーションなどの必要資材をコンテナにコピー
COPY --chown=1000:1000 application.war /home/eapuser/
COPY --chown=1000:1000 exec_ijsetup.sh /home/eapuser/
# ijsetup --skippcmiコマンドを実行します。
# 今後のasadminコマンド実行に備えて、パスワードファイルを作成します。
# docker inspectでADMIN_PASSWORDを参照できないようにするため、
# 別のスクリプトで環境変数の設定とijsetupコマンドの実行、パスワードファイル作成を記述しています。
RUN chown -R eapuser work && \
chmod +x /home/eapuser/exec_ijsetup.sh && \
/home/eapuser/exec_ijsetup.sh && \
rm /home/eapuser/exec_ijsetup.sh
# 運用ユーザーをeapuserに変更
USER 1000
# アプリケーションの配備、設定変更
# 異なるRUN命令でasadminコマンドを記述するとDASが停止状態に戻るため、1つのRUN命令に記載します。
RUN /opt/FJSVeapf/glassfish/glassfish/bin/asadmin start-domain && \
/opt/FJSVeapf/glassfish/glassfish/bin/asadmin --user admin --passwordfile /home/eapuser/passwordfile.txt create-cluster container-cluster && \
/opt/FJSVeapf/glassfish/glassfish/bin/asadmin --user admin --passwordfile /home/eapuser/passwordfile.txt create-local-instance --cluster container-cluster container-instance && \
/opt/FJSVeapf/glassfish/glassfish/bin/asadmin --user admin --passwordfile /home/eapuser/passwordfile.txt deploy --target container-cluster /home/eapuser/application.war && \
/opt/FJSVeapf/glassfish/glassfish/bin/asadmin --user admin --passwordfile /home/eapuser/passwordfile.txt set-log-attributes --target container-cluster org.glassfish.main.jul.handler.GlassFishLogHandler.rotation.enabled=false && \
/opt/FJSVeapf/glassfish/glassfish/bin/asadmin --user admin --passwordfile /home/eapuser/passwordfile.txt set container-cluster.http-service.access-log.rotation-enabled=false && \
/opt/FJSVeapf/glassfish/glassfish/bin/asadmin --user admin --passwordfile /home/eapuser/passwordfile.txt set container-cluster.network-config.protocols.protocol.http-listener-1.http.scheme-mapping=X-Forwarded-Proto && \
/opt/FJSVeapf/glassfish/glassfish/bin/asadmin --user admin --passwordfile /home/eapuser/passwordfile.txt start-cluster container-cluster && \
/opt/FJSVeapf/glassfish/glassfish/bin/asadmin --user admin --passwordfile /home/eapuser/passwordfile.txt stop-cluster container-cluster && \
/opt/FJSVeapf/glassfish/glassfish/bin/asadmin stop-domain && \
ln -sf /dev/stdout /var/opt/FJSVeapf/glassfish/nodes/localhost-domain1/container-instance/logs/access/server_access_log.txt && \
ln -sf /dev/stderr /var/opt/FJSVeapf/glassfish/nodes/localhost-domain1/container-instance/logs/server.log && \
rm /home/eapuser/passwordfile.txt && \
rm /home/eapuser/application.war
# GlassFish起動
CMD ["/opt/FJSVeapf/glassfish/bin/container_glassfish_start", "container-instance"]例
Dockerfile記述例
# 本例ではベースイメージにAmazon Linux 2023 base container imageを使用します。
FROM public.ecr.aws/amazonlinux/amazonlinux:2023
# 必須ソフトウェアをインストールします。
# 本製品の「インストールガイド」に記載されている基本ソフトウェアのパッケージに加えて、
# 以下のパッケージのインストールが必要です。
# findutils.x86_64
# gzip.x86_64
# perl-interpreter.x86_64
# procps-ng.x86_64
# tar.x86_64
# util-linux.x86_64
# util-linux-core.x86_64
# which.x86_64
# 必要に応じてトラブルシューティングに必要な基本ソフトウェアのパッケージもインストールしてください。
RUN /bin/dnf -y install alsa-lib.x86_64 freetype.x86_64 graphite2.x86_64 harfbuzz.x86_64 \
libpng.x86_64 libX11.x86_64 libXau.x86_64 libxcb.x86_64 \
libXext.x86_64 libXi.x86_64 libXrender.x86_64 libXtst.x86_64 unzip.x86_64 \
findutils.x86_64 gzip.x86_64 perl-interpreter.x86_64 procps-ng.x86_64 tar.x86_64 util-linux.x86_64 \
util-linux-core.x86_64 which.x86_64 && \
/bin/dnf clean all -y;
# 運用ユーザーを一般ユーザーに変更する場合、ユーザーを追加します。
RUN useradd -u 1000 -d /home/eapuser -s /bin/bash eapuser
# 本製品のインストール作業
RUN mkdir work
COPY eap/ work/
COPY param.csv work/
RUN work/install.sh -s -f work/param.csv && \
rm -rf work/*
# アプリケーションなどの必要資材をコンテナにコピー
COPY --chown=1000:1000 application.war /home/eapuser/
COPY --chown=1000:1000 exec_ijsetup.sh /home/eapuser/
# ijsetup --skippcmiコマンドを実行します。
# 今後のasadminコマンド実行に備えて、パスワードファイルを作成します。
# docker inspectでADMIN_PASSWORDを参照できないようにするため、
# 別のスクリプトで環境変数の設定とijsetupコマンドの実行、パスワードファイル作成を記述しています。
RUN chown -R eapuser work && \
chmod +x /home/eapuser/exec_ijsetup.sh && \
/home/eapuser/exec_ijsetup.sh && \
rm /home/eapuser/exec_ijsetup.sh
# 運用ユーザーをeapuserに変更
USER 1000
# アプリケーションの配備、設定変更
# 異なるRUN命令でasadminコマンドを記述するとDASが停止状態に戻るため、1つのRUN命令に記載します。
RUN /opt/FJSVeapf/glassfish/glassfish/bin/asadmin start-domain && \
/opt/FJSVeapf/glassfish/glassfish/bin/asadmin --user admin --passwordfile /home/eapuser/passwordfile.txt create-cluster container-cluster && \
/opt/FJSVeapf/glassfish/glassfish/bin/asadmin --user admin --passwordfile /home/eapuser/passwordfile.txt create-local-instance --cluster container-cluster container-instance && \
/opt/FJSVeapf/glassfish/glassfish/bin/asadmin --user admin --passwordfile /home/eapuser/passwordfile.txt deploy --target container-cluster /home/eapuser/application.war && \
/opt/FJSVeapf/glassfish/glassfish/bin/asadmin --user admin --passwordfile /home/eapuser/passwordfile.txt set-log-attributes --target container-cluster org.glassfish.main.jul.handler.GlassFishLogHandler.rotation.enabled=false && \
/opt/FJSVeapf/glassfish/glassfish/bin/asadmin --user admin --passwordfile /home/eapuser/passwordfile.txt set container-cluster.http-service.access-log.rotation-enabled=false && \
/opt/FJSVeapf/glassfish/glassfish/bin/asadmin --user admin --passwordfile /home/eapuser/passwordfile.txt set container-cluster.network-config.protocols.protocol.http-listener-1.http.scheme-mapping=X-Forwarded-Proto && \
/opt/FJSVeapf/glassfish/glassfish/bin/asadmin --user admin --passwordfile /home/eapuser/passwordfile.txt start-cluster container-cluster && \
/opt/FJSVeapf/glassfish/glassfish/bin/asadmin --user admin --passwordfile /home/eapuser/passwordfile.txt stop-cluster container-cluster && \
/opt/FJSVeapf/glassfish/glassfish/bin/asadmin stop-domain && \
ln -sf /dev/stdout /var/opt/FJSVeapf/glassfish/nodes/localhost-domain1/container-instance/logs/access/server_access_log.txt && \
ln -sf /dev/stderr /var/opt/FJSVeapf/glassfish/nodes/localhost-domain1/container-instance/logs/server.log && \
rm /home/eapuser/passwordfile.txt && \
rm /home/eapuser/application.war
# GlassFish起動
CMD ["/opt/FJSVeapf/glassfish/bin/container_glassfish_start", "container-instance"]コンテナイメージのビルド
上記のDockerfileを使用して、コンテナイメージを作成します。
ここでは、カレントディレクトリーを作業ディレクトリー(/docker/work/)に移動し、作業ディレクトリーのDockerfileや資材を使用してビルドを実行後、イメージ名を"demo"として登録します。
# cd /docker/work # docker build . -t <リポジトリー名>/demo # docker push <リポジトリー名>/demo