外部データベースを利用する
最終更新日: 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の修正 [R9.0.2以前]
R9.0.2までの 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の修正 [R9.0.3以降]
R9.0.3以降の 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-9.0.2\upload_dir:/usr/local/upload_dir -v C:\Wagby-9.0.2\export:/usr/local/export jasminesoft/wagbyapp
- --link=db:dbオプションは、"db" という名前で起動したコンテナを、実行したホスト内で "db" という名前でアクセスできるようにする。
起動後は、ブラウザから次の URL を指定して動作を確認します。admin でログオンできれば、接続できています。
