コンテナ動作環境で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 $ret
Dockerfileの作成
以下のポイントに従い、作業ディレクトリー(/docker/work/)にDockerfileを作成します。
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 ロガーの定義項目」の「ログローテーションの有効化」を以下のように設定します。
com.sun.enterprise.server.logging.GFFileHandler.rotationEnabled=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 com.sun.enterprise.server.logging.GFFileHandler.rotationEnabled=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