メンチカツには醤油でしょ!!

ITエンジニア徒然 (AWS/Java/JavaScript/Google Spreadsheets/Jenkins/Mac/外部コミュニティ・勉強会レポ)

Wildfly on Docker(jboss/wildfly)でコンテナ外部から色々設定

$ sudo docker pull jboss/wildfly

https://hub.docker.com/r/jboss/wildfly/

Dockerfile

FROM jboss/wildfly
RUN /opt/jboss/wildfly/bin/add-user.sh 【user】 【password】 --silent
ADD your-awesome-app.war /opt/jboss/wildfly/standalone/deployments/
CMD ["/opt/jboss/wildfly/bin/standalone.sh", "-b", "0.0.0.0", "-bmanagement", "0.0.0.0"]

イメージに管理ユーザー設定を行い、アプリ(war)を載せて、始動する際のブロードキャストのオプション指定を行っています。

docker build + run

$ sudo docker build --tag=your-wildfly-app .
$ sudo docker run -p 8080:8080 -p 9990:9990 -p 9999:9999 \
-v /etc/timezone:/etc/timezone \
-v ~/shared/wildfly/logs:/opt/jboss/logs \
-v ~/shared/wildfly/configuration:/opt/jboss/wildfly/standalone/configuration \
-v ~/shared/wildfly/external-properties:/opt/jboss/wildfly/modules/system/layers/base/com/ryoichi0102/external-properties/main \
-v ~/shared/wildfly/modules/system/layers/base/com/mysql/main:/opt/jboss/wildfly/modules/system/layers/base/com/mysql/main \
your-wildfly-app

これで外部から、warファイル、DB接続先などのstandalone.xml 各種設定、外部properties、外部jarライブラリ、アクセス先ポート番号の指定が行えましたね!
(あとtimezoneの共有、ログ出力ディレクトの共有(外から見える化)も追記しました)

補足

環境が2つあって
・Docker on Ubuntu Desktop on Hyper-V on Windows (Win系)
・Docker on Ubuntu on VirtualBox on Vagrant on Mac (Mac系)
なんですが、
Win系はUbuntu DesktopでGUIの共有フォルダー設定
Mac系はVagrantfileに

config.vm.synced_folder "~/Documents/vagrant/docker", "/home/vagrant/shared/"
config.vm.network "forwarded_port", guest: 8080, host: 9080
config.vm.network "forwarded_port", guest: 9990, host: 9990
config.vm.network "forwarded_port", guest: 9999, host: 9999

なんて書いてます。
ポートフォワードの設定は下記も参考にしてみてください。

chicken-yuta.com

余談

Mac系のVagrantのポート開放が中途半端になったままでハマった^^

※ 後日追記

Dockerコンテナ内の時計(timezone)がUTCになっていたため
-v /etc/timezone:/etc/timezone
を追加しました。

コンテナ外のOSのtimezoneと合うようになります。

さらに
-v ~/shared/wildfly/logs:/opt/jboss/logs
を追加しました。
これはSLF4J+Logbackのログ出力ディレクトリを指定して、
docker execしなくても他のマシンから見れるようにするためです。