Red Hat で Java 関連の製品を担当している伊藤ちひろです。
この記事では、すでにビルドされた WAR ファイルを用いて、JBoss EAP 8.0 のコンテナを作成する方法を紹介します。
みなさんのシステムには、WARファイルをビルドする手順がすでにあるでしょう。 そのような場合、その環境を生かしてJakarta EEアプリケーションをコンテナ化できます。 Jakrta EEアプリケーションのコンテナ化するに当たり以下のような不安があるかもしれません。
- 難しいツールを使わないといけないかもしれない
- CI/CD を構築しないといけない
実際はそのようなことはなく、Jakarta EEアプリケーションのコンテナ化は次の 3 ステップだけで完了します。
- コンテナファイルを作成
- コンテナイメージを作成
- コンテナを起動
今回のアプリケーションは my-app.war
を使用します。
1. コンテナファイルを作成
コンテナイメージを作成するにはコンテナファイル (Containerfile, Dockerfile) が必要です。
JBoss EAPのコンテナファイルは公式ドキュメントにサンプルがあります。 このサンプルには、アプリのデプロイ方法などがコメントとして記載されています。 以下は公式ドキュメントからコピーしたコンテナファイルに対して以下を実施しました。
- コメントを削除
- アプリケーションをデプロイするコードを1行追加
3.4. OpenShift へのサードパーティーアプリケーションのデプロイ | Red Hat Product Documentation
FROM registry.redhat.io/jboss-eap-8/eap8-openjdk17-builder-openshift-rhel8:latest AS builder ENV GALLEON_PROVISION_FEATURE_PACKS org.jboss.eap:wildfly-ee-galleon-pack,org.jboss.eap.cloud:eap-cloud-galleon-pack ENV GALLEON_PROVISION_LAYERS cloud-default-config ENV GALLEON_PROVISION_CHANNELS org.jboss.eap.channels:eap-8.0 RUN /usr/local/s2i/assemble FROM registry.redhat.io/jboss-eap-8/eap8-openjdk17-runtime-openshift-rhel8:latest AS runtime COPY --from=builder --chown=jboss:root $JBOSS_HOME $JBOSS_HOME $JBOSS_HOME/standalone/configuration # my-app.warをデプロイ(サンプルに以下の1行だけを追加) COPY --chown=jboss:root my-app.war $JBOSS_HOME/standalone/deployments RUN chmod -R ug+rwX $JBOSS_HOME
コンテナファイルの作成はこれで完了です。Containerfile
という名前で保存しましょう。
2. コンテナイメージを作成
WARファイルに加え、Containerfileも準備ができました。 それではコンテナイメージを作成します。
作業ディレクトリは以下のようになっています。
# ls -l total 8 -rwxrwxrwx 1 root root 1767 Jun 28 15:20 Containerfile -rwxrwxrwx 1 root root 2078 Jun 27 16:01 my-app.war
コンテナイメージの作成は、コマンドを1つ実行するだけです。
この実行には registry.redhat.io
へのログインが必要となります。まだログインされてない場合は、以下のリンクをごらん下さい。
Red Hat コンテナーレジストリーの認証 - Red Hat Customer Portal
それでは、コンテナイメージを作成します。
> podman build -t my-app .
しばらく時間がかかりますが、以下のようなログが出れば成功です。
Successfully tagged localhost/my-app:latest bec890e0bcf64d43b8193b6cc16a7469e03be81983923022ca5cf9c529a468c5
コンテナイメージが作成されたことを確認しましょう。今回作成したコンテナイメージはlocalhost/my-app
として保存されます。
> podman images REPOSITORY TAG IMAGE ID CREATED SIZE localhost/my-app latest bec890e0bcf6 2 minutes ago 869 MB <none> <none> 6d564a55140f 2 minutes ago 910 MB registry.redhat.io/jboss-eap-8/eap8-openjdk17-builder-openshift-rhel8 latest d381ac3b8535 5 weeks ago 424 MB registry.redhat.io/jboss-eap-8/eap8-openjdk17-runtime-openshift-rhel8 latest 801b9cf38b51 5 weeks ago 409 MB
ここまでで、コンテナイメージの作成は完了です。
3. コンテナを起動
最後に、コンテナを起動してみましょう。
コンテナの起動もコマンドを1つ実行するだけです。
> podman run -d -p 8080:8080 localhost/my-app bd33f23fc9181286ee52c929f8fb8badbe5ff670f3758babff4de14bb7eec039
コンテナが起動したことを確認してみましょう。
> podman ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES bd33f23fc918 localhost/my-app:latest sh -c ${JBOSS_CON... 25 seconds ago Up 26 seconds 0.0.0.0:8080->8080/tcp great_liskov
アプリケーションにアクセスしてみましょう。
今回のアプリケーションは、WARの中でコンテキストパスは変更していないためmy-app
が使われます。
そのため、アクセスするURLはlocalhost:8080/my-app/<アプリ内のパス>
です。
コンテキストパスを変更している場合は、my-app
の部分をそちらのパスへ変更してください。
アクセスするツールは Servlet/JSP であればブラウザ、JAX-RS であれば REST Client を用います。
今回のアプリケーションは JSP なため、ブラウザでアクセスしてみます。
無事に JSP が表示されました。
いかがでしたでしょうか。 既存アプリケーションのWARファイルがあれば簡単にコンテナイメージが作成できました。 Jakarta EEアプリケーションのコンテナ化は、難しそうなイメージがあるかもしれませんが、興味のある方はぜひ試してみてください。
参考
3.4. OpenShift へのサードパーティーアプリケーションのデプロイ | Red Hat Product Documentation