ページの先頭行へ戻る
Enterprise Application Platform V1.2.0 GlassFishユーザーズガイド

9.3 コンテナイメージの作成

コンテナ動作環境でGlassFishを利用する場合、GlassFishのコンテナイメージを作成します。

以下にdockerコマンドを利用してコンテナイメージを作成する例を説明します。

以降の操作はすべてrootユーザーで行うものとします。

  1. インストール資材の準備

    本製品の製品メディア(DVD-ROM)を作業ディレクトリー(/docker/work/)配下のディレクトリーにマウントしてください。

    以下は、ディレクトリー"/docker/work/eap"を作成してマウントする例です。

    # mkdir -p /docker/work/eap
    # mount -t iso9660 -r /dev/cdrom /docker/work/eap

  2. インストールパラメーターファイルの作成

    以下のようにGlassFishをインストールすることを指定したインストールパラメーターファイル(/docker/work/param.csv)を用意します。

    以下の例では、運用ユーザーを一般ユーザー「eapuser」に指定しています。

    <param.csv>

    User,eapuser
    FN_GlassFish,Y

  3. アプリケーション実行ファイル、セットアップに必要なスクリプトの配備

    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

  4. 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アクセスログは出力されなくなります。

    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"]

  5. コンテナイメージのビルド

    上記のDockerfileを使用して、コンテナイメージを作成します。

    ここでは、カレントディレクトリーを作業ディレクトリー(/docker/work/)に移動し、作業ディレクトリーのDockerfileや資材を使用してビルドを実行後、イメージ名を"demo"として登録します。

    # cd /docker/work
    # docker build . -t <リポジトリー名>/demo
    # docker push <リポジトリー名>/demo