Tomcat を実行しているコンテナー内で Java Web アプリケーションをデプロイしてデバッグする
Docker コンテナーを使用して、Java Web アプリケーションをデプロイおよびデバッグするためのアプリケーションサーバーを実行できます。これは、さまざまな環境を再現するさまざまなバージョンのアプリケーションサーバーで Web アプリケーションをテストおよびデバッグするための優れた方法です。
このチュートリアルでは、Docker Compose ファイルを使用して Docker コンテナーを実行し、Tomcat アプリケーションサーバーにデプロイされた Web アプリケーションと、デバッグに必要なすべての設定 (デバッガーポートの公開、コンテナー内の Tomcat への WAR ファイルの出力ディレクトリのバインドマウント、およびデバッガーソケットのオープン) を行う方法を説明します。
サンプルプロジェクトのクローンを作成する
アプリケーションのソースコードは、https://github.com/IdeaUJetBrains/Tomcat_docker_debug(英語) の GitHub でホストされています
メインメニューで、
に移動します。リポジトリの URL を指定して、クローンをクリックします。
必要に応じて、クローンプロジェクトを新しいウィンドウで開くことに同意します。
WAR アーティファクトをビルドする
メインメニューで
に移動しますtomcat_docker_debug:war が展開しましたを選択してビルドします。
ビルドされたアーティファクトは、target/ のプロジェクトルートに表示されます。
Docker Compose を使用してアプリケーションを実行する
docker-compose.yml を開きます。
services
の横のガターで をクリックします。
これにより、docker-compose.yml で定義された別の Docker Compose サービスとしてコンテナー内のアプリケーションを実行する Docker Compose 実行構成が作成されます。
- イメージ
このチュートリアルでは、Jakarta EE 9.1 と互換性のあるイメージ
tomcat:10.0-jdk17
を使用します。アプリケーションで Jakarta EE 10 を使用している場合は、Tomcat 10.1 で実行します。Java EE 8 の場合は、Tomcat 9 以前のバージョンを使用してください。- ポート
ホストマシンからアプリケーションにアクセスするために、Docker Compose はコンテナーのポート 8080 をホストのポート 8888 として公開します。また、コンテナーのポート 5005 をデバッガーのホストのポート 5005 として公開します。
- ボリューム
WAR アーティファクトをコンテナーにコピーする代わりに、Docker Compose バインドはアプリケーション出力ディレクトリ ./target をコンテナー内の Tomcat ディレクトリ /usr/local/tomcat/webapps にマウントします。
- 環境変数
デバッガーをアタッチするために、Docker Compose は
JAVA_OPTS
環境変数を次のように設定します。-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=*:5005- コマンド
Docker Compose は、Tomcat イメージによって宣言されたデフォルトのコマンドをオーバーライドし、それを
catalina.sh run
に設定します。
アプリケーションが実行されていることを確認する
コンテナーログを開き、Tomcat が開始したというメッセージで終了していることを確認します。
ブラウザーで次の URL を開きます: http://localhost:8888/Tomcat_docker_debug-1.0-SNAPSHOT/api/hello-world。
Hello, World!
を含むページを返す必要があります
デバッガーをアタッチする
デバッガーをリモート接続する
remote_tomcat_debug
という名前のリモート JVM デバッグ構成を実行します。src/main/java/com/example/tomcat_docker_debug/HelloResource.java を開き、
return "Hello, World!";
のある行のhello()
メソッドにブレークポイントを設定します。REST エンドポイントを再度リフレッシュするか、開きます: http://localhost:8888/Tomcat_docker_debug-1.0-SNAPSHOT/api/hello-world。今回は、前述のメソッド内のブレークポイントにヒットするはずです。
関連ページ:
Docker
Docker は、分離された再現可能な環境で実行可能ファイルをデプロイおよび実行するためのツールです。これは、たとえば、本番環境と同じ環境でコードをテストする場合に役立ちます。IntelliJ IDEA は Docker 機能を統合し、Docker イメージの作成、Docker コンテナーの実行、Docker Compose アプリケーションの管理、パブリックおよびプライベート Docker レジストリの使用など、IDE から直接実行するための支援を提供します。Docker プラグインを有効にする...
アプリケーションサーバーコンテナー内に JavaWeb アプリケーションをデプロイする
Docker を使用して、アプリケーションサーバー(Tomcat、Wildfly など)を実行し、JavaWeb アプリケーションをそのサーバーにデプロイできます。このチュートリアルでは、単純な Java Web アプリケーションを作成し、デプロイ可能な Web アプリケーションリソース(WAR)ファイルを作成して、Docker コンテナーとして実行されているアプリケーションサーバー内にデプロイする方法について説明します。Java Web アプリケーションを作成するメインメニューで、に移動する...
Docker のトラブルシューティング
JetBrains は、Docker プラグインの修正と改善に常に取り組んでいます。既知の Docker の問題と機能リクエストのリストをバグ追跡システムで見つけて、最も影響を受けるものに投票できます。独自のバグや機能リクエストを提出することもできます。次の問題のいずれかが発生した場合は、対応する推奨される解決策を試してください。IntelliJ IDEA から Docker デーモンに接続できません以下を確認してください:Docker がインストールされ、実行されている、IntelliJ IDE...