外部データベースを利用する

最終更新日: 2021年9月9日
R8 | R9

前提

ここではデータベースとして MySQL を利用します。他のデータベースを利用する場合は、以下の手順を参考にしてください。

前提条件は次の通りです。

  • ホスト名をdbとする。
  • データベース名、ユーザ名、パスワードはMySQLのDockerイメージを起動するときの値を用いる。
  • データベース接続のパスワードを暗号化の設定を有効にした場合、Dockerイメージ作成時にコピーするファイルが増えます。Dockerfile.encryptpwdをDockerfileに上書きコピーして、Dockerイメージの作成を行ってください。

Dockerイメージの準備

MySQL が含まれた Docker イメージをダウンロードします。

"mysql:5" は MySQL 公式の Docker イメージです。

docker run -d -P --name=db -e MYSQL_USER=wagby -e MYSQL_PASSWORD=wagby -e MYSQL_DATABASE=wagbydb -e MYSQL_RANDOM_ROOT_PASSWORD=yes mysql:5 --character-set-server=utf8 --collation-server=utf8_general_ci
  • -eオプションに続いて MYSQL_USER, MYSQL_PASSWORD, MYSQL_DATABASE を指定する。データベースのユーザ名、パスワード、データベースを作成する。
  • --name オプションは、起動する Docker コンテナの名前を指定する。ここでは "db" という名前を付けている。
  • --rm オプションは今回は付与していない。コンテナを停止した際に、データベースファイルが自動的に削除されないようにするため。
  • -P オプションは、データベースのポートを公開する設定。

ポート番号の確認

docker portコマンドを用いて、起動した MySQL のポート番号を確認します。

docker port db

例えば、次のような出力を得られます。

3306/tcp -> 0.0.0.0:32768

上の出力から、ホストのポート番号 32768 が MySQL で使われていることがわかりました。

MySQL の接続テスト

mysql が用意しているコマンドラインプログラムを用いて、ホストから接続できることを確認します。

"C:\Program Files\MySQL\MySQL Server 5.7\bin\mysql.exe" -P 32768 -u wagby -p wagbydb

パスワードを尋ねられるので、入力します。

Enter password: *****

MySQL サーバに接続されていれば、データベースは正常に起動しています。

初期データのインポート

ホストから、Docker で実行されている MySQL に対して InitLoaderを実行し、初期データを作成します。

initdb.xmlの修正 [R8.5.6以前]

R8.5.6までの Wagby をご利用の場合、ホストの Wagby 環境でビルドしたアプリケーション wagbyapp/webapps/wagby/WEB-INF/export/conf/initdb.xml を編集します。(注:Dockerコンテナに含めたWagbyアプリケーションではありません。)

具体的には、ポート番号を、先ほど確認したポート番号に置換します。

修正前:

url="jdbc:mysql://db/wagbydb?useUnicode=true&relaxautoCommit=true&zeroDateTimeBehavior=convertToNull"

修正後:

url="jdbc:mysql://localhost:32768/wagbydb?useUnicode=true&relaxautoCommit=true&zeroDateTimeBehavior=convertToNull"

catalina.propertiesの修正 [R8.5.7以降]

R8.5.7以降の Wagby をご利用の場合、ホストの Wagby 環境でビルドしたアプリケーション wagbyapp/conf/catalina.properties を編集します。(注:Dockerコンテナに含めたWagbyアプリケーションではありません。)

具体的には、ポート番号を、先ほど確認したポート番号に置換します。

修正前:

WAGBY_DATASOURCE_URL=jdbc:mysql://db/wagbydb?useUnicode=true&relaxautoCommit=true&zeroDateTimeBehavior=convertToNull

修正後:

WAGBY_DATASOURCE_URL=jdbc:mysql://localhost:32768/wagbydb?useUnicode=true&relaxautoCommit=true&zeroDateTimeBehavior=convertToNull

init_db.batの実行

ホストの Wagby 環境で、init_db.batを実行します。MySQLのコンテナに対してテーブルが作成されます。これは1回だけ実行します。

cd wagbyapp/bin
init_db.bat

動作確認

ビルドした wagbyapp を含んだ Docker イメージを実行します。このとき --link オプションを指定します。

docker run -d --rm -p 8888:8080 --name wagbyapp --link=db:db -v C:\Wagby-8.5.6\upload_dir:/usr/local/upload_dir -v C:\Wagby-8.5.6\export:/usr/local/export jasminesoft/wagbyapp
  • --link=db:dbオプションは、"db" という名前で起動したコンテナを、実行したホスト内で "db" という名前でアクセスできるようにする。

起動後は、ブラウザから次の URL を指定して動作を確認します。admin でログオンできれば、接続できています。

図1 2つのDockerコンテナを利用している