背景
JDK11とJDK8でFrameworkのふるまいが若干異なり、wilfly(16.0.0.Final)のコンテナをJDK8で動くか確認しようとしていた。
それからwildflyの構成を変更する意図で、standalone-full.xmlを書き換えたいと考えていた。
以降、下記の実装として対応した内容を記録する。
- jboss/wildfly:16.0.0.Finalを使いたい
- デフォルトJDK11になっているけど、JDK8を使いたい
- standalone-full.xmlを書き換えたい
※あくまで検証で試行錯誤した手順であり、本番環境等での適用を考慮した対応ではありません。
実施したこと
JDKの変更
以下の対応を実施。
- DockerfileにjDK8をyum installしてJAVA HOMEを設定する処理を追加
- yumインストールの処理は毎度実行されると重いので、分離してイメージをPrivate Registryに登録
- 通常利用するjboss/wildflyのDockerfileは上記のJDK入れ替え済みイメージをベースとして利用するように変更
standalone-full.xmlの置換
- コンテナにログインしてls -alを実行すると、「/opt/jboss/wildfly/standalone/configuration/standalone-full.xml」のパーミッションは、「jboss:root」だった
- 普通にコピーするとjboss:rootにchownできないので、Dockerfile内でCOPYの処理時に「--chown=jboss:root」させた
サンプル
下記をdocker buildして、private repo(my.private.repo.com:5000)に「/jboss/wildfly:16.0.0.Final-jdk1.8.0_222」として登録する。
Dockerfile.wildfly-jdk8
FROM jboss/wildfly:16.0.0.Final
USER root
RUN yum -y install java-1.8.0-openjdk-devel && yum clean all
ENV JAVA_HOME /usr/lib/jvm/java
RUN /opt/jboss/wildfly/bin/add-user.sh admin1234 Password1! --silent
CIや開発端末上で使うDockerfileは以下の形式にする。(必要に応じて、warファイルとstandalone-full.xmlを更新できる。)
Dockerfile
FROM my.private.repo.com:5000/jboss/wildfly:16.0.0.Final-jdk1.8.0_222
RUN ls -la /opt/jboss/wildfly/standalone/configuration/ && rm -f /opt/jboss/wildfly/standalone/configuration/standalone-full.xml
COPY --chown=jboss:root ./standalone-full.xml /opt/jboss/wildfly/standalone/configuration
ADD target/*.war /opt/jboss/wildfly/standalone/deployments/
RUN ls -la /opt/jboss/wildfly/standalone/configuration/ && ls -la /opt/jboss/wildfly/standalone/deployments/ && /opt/jboss/wildfly/bin/add-user.sh admin1234 Password1! --silent
その他
- これがベストな対応かわからないので、もっとスマートな対応をご存知の方がいれば、教えてください。