サポート > Wagby Developer Network(R8) > Dockerを利用する > Dockerイメージの作成方法

Wagby でビルドしたアプリケーションを Docker イメージとすることで、Docker をサポートする各種環境で運用することができます。

ご利用の開発環境に Docker をインストールします。Windows 用には「Docker for Windows」、Mac OS X 用には「Docker for Mac」が用意されています。

アプリケーション設計方針の影響

ビルドしたアプリケーションを一つのサーバで動作させる場合、設計方針の影響はありません。

ビルドしたアプリケーションを複数のサーバ(正確にはコンテナ)で起動する場合や、オートスケールを行う場合は、次の対応を行なってください。

  • すべてのモデルのロック方式を楽観ロックに統一する。
  • すべてのモデルのキャッシュをオフにする。
  • ロードバランサーを使う場合は、スティッキーセッションの設定を行う。

また、次の制約があります。

  • ジョブスケジュールは設定しない。

上記制約は将来の Wagby で解消されるよう計画中です。

外部データベースの利用

外部データベースを利用する場合、ネットワーク経由で接続できるように、接続先データベースの URL に適切なホスト名を指定してください。IPアドレスによる指定を行うことはできません。

Docker向けのカスタマイズファイル

ビルドしたアプリケーションから Docker コンテナを作成するために、次のカスタマイズファイルを配置してください。

customize/resource/log4j.properties

このファイルを適用すると、これまで wagbyapp/logs/system.log に出力されていたログが、標準出力のみに出力するようにします。これにより docker logs コマンドによるログ閲覧や、Docker log driverによる各種出力先に対応できるようになります。[後述]

注意:この影響で "管理処理 > システムログ閲覧" 機能は利用できなくなります。

customize/tomcat/conf/logger.properties

これまでファイルとして出力されていたTomcatのログ(catalina.yyyy-MM-dd.log)を、標準出力のみに出力するようにします。目的は上と同じです。

WagbyDesginerでビルドした後、次の手順でDockerイメージを作成し、起動します。

  1. WARファイルの作成
  2. Dockerイメージの作成
  3. Dockerイメージの起動

最初は外部データベースを使わず、内蔵データベース(HSQLDB)を使って動作確認するものとします。

1. WARファイルの作成

WagbyDesignerにてビルド後、コマンドプロンプトを開き、次のコマンドを実行してください。

cd [インストールフォルダ]\misc
createWar.bat
Linux/Mac OS X 環境の場合は createWar.sh コマンドになります。

実行すると、インストールフォルダに[アプリケーション名].warファイルが作成されます。

例えばアプリケーション名がwagbyの場合は、wagby.warとなります。ルートデプロイの場合はROOT.warになります。

2. Dockerイメージの作成

docker build コマンドを使って Docker イメージを作成します。

docker build -t jasminesoft/wagbyapp .

ここで "jasminesoft/wagbyapp" はイメージの名前になります。変更した場合は以降の説明文も適切に読み替えてください。

Dockerfile

次の Dockerfile を提供しています。

FROM tomcat:8.5
LABEL maintainer="xxx@YOURDOMAIN"
ARG WAGBY_MX="512m"
ARG WAGBY_MS="64m"
ARG WAGBY_WARFILE="./wagby.war"
 
RUN rm -r $CATALINA_HOME/webapps/∗
ADD ./wagbyapp/conf/web.xml $CATALINA_HOME/conf/web.xml
ADD ./wagbyapp/conf/context.xml $CATALINA_HOME/conf/context.xml
ADD ./wagbyapp/conf/app_jaas.config $CATALINA_HOME/conf/app_jaas.config
ADD ./wagbyapp/lib/j_conint.jar $CATALINA_HOME/lib/j_conint.jar
ADD ./wagbyapp/lib/spring-instrument-tomcat.jar $CATALINA_HOME/lib/spring-instrument-tomcat.jar

ENV CATALINA_OPTS "-server -Xmx$WAGBY_MX -Xms$WAGBY_MS -Djava.security.auth.login.config=$CATALINA_HOME/conf/app_jaas.config -Dsun.nio.cs.map=x-windows-iso2022jp/ISO-2022-JP -Duser.timezone=Asia/Tokyo -XX:+IgnoreUnrecognizedVMOptions --add-modules=java.xml.bind,java.activation,java.xml.ws.annotation"

# Database JDBC Driver
ADD ./customize/tomcat/lib $CATALINA_HOME/lib
ADD ./wagbyapp/lib/hsqldb.jar $CATALINA_HOME/lib/hsqldb.jar

# check Web application
ADD $WAGBY_WARFILE $CATALINA_HOME/webapps

WORKDIR $CATALINA_HOME/bin
  • 先頭の FROM 文で、ベースは Docker Hub で提供している Tomcat 8.5 であることを指定しています。さらに細かいバージョンを指定することもできます。詳細は公式リポジトリを確認してください。
  • 2行目の maintainer 指定には、開発者のメールアドレスを設定するようにしてください。
  • 3行目と4行目のメモリ指定は、適切な値に変更してください。ここではヒープサイズの最大値を512メガバイトとしています。
  • 5行目のWARファイル名は、上の 1. で説明したWARファイル名を指定してください。標準では wagby.war となっています。

なお一時的な変更であれば Dockerfile を編集せず、docker build コマンド実行時に --build-arg パラメータを指定することで、上書きすることもできます。例を示します。

docker build -t jasminesoft/wagbyapp . --build-arg WAGBY_WARFILE=aaa.war --build-arg WAGBY_MX=1024m --build-arg WAGBY_MS=128m

3. Dockerイメージの起動

内蔵データベース (HSQLDB) を用いている場合、次のコマンドで起動させることができます。

docker run -d --rm -p 8888:8080 --name wagbyapp1 jasminesoft/wagbyapp
  • -dはバックグラウンドでの実行を意味します。
  • --rmは起動したDockerコンテナを終了(stop)したら、このDockerコンテナを削除するという指定です。
  • -p 8888:8080は、コンテナ内の8080番ポートをホストの8888番ポートに割り当てるという指定です。
  • --nameは起動したコンテナに名前を付けています。コンテナの管理で利用します。
  • jasminesoft/wagbyappは、起動するDockerイメージです。

Docker イメージ起動後、ブラウザから次の URL にアクセスして動作を確認します。

http://localhost:8888/wagby/

Dockerコンテナ内に作成されたファイルは、コンテナが削除されると同時に削除されます。これはエクスポートしたデータや、アップロードしたファイルに影響があります。

Wagbyではexportフォルダにエクスポート時にファイルが作成されます。ファイル型項目でアップロードしたファイルはupload_dirフォルダに作成されます。

この対応のため、DockerのData Volumeの機能を使って、ホスト内のフォルダに保存するようにします。 具体的には -v オプションにて、ホスト内のフォルダとコンテナ内のフォルダをつなげます。次のようにします。

docker run -d --rm -p 8888:8080 --name wagbyapp1 -v C:\Wagby-8.1.1\upload_dir:/usr/local/upload_dir -v C:\Wagby-8.1.1\export:/usr/local/export jasminesoft/wagbyapp

この例では、コンテナの /usr/local/upload_dir フォルダを、実際のホストマシン(Windows OS)の Wagby-8.1.1\upload_dir フォルダにマッピングしています。同様に /usr/local/export フォルダを、実際のホストマシン(Windows OS)の Wagby-8.1.1\export にマッピングしています。(コンテナ内で動作する)Wagby アプリケーションでは、それぞれ /usr/local/upload_dir フォルダと /usr/local/export フォルダを利用するようになっていると解釈してください。

ここで紹介した3つのファイルをダウンロードできます。

次のファイルが含まれています。

  • Dockerfile
  • customize/tomcat/conf/logging.properties
  • customize/resources/log4j.properties
Wagby Developer Day 2018