Docker Compose を使用して Spring Boot アプリケーションを実行およびデバッグする
IntelliJ IDEA を使用すると、Docker Compose 下の複数の Docker コンテナーで実行されている Spring Boot アプリケーションを実行およびデバッグできます。このチュートリアルでは、同じ仮想ネットワーク内のコンテナー内で 2 つの Docker Compose サービス (単純な Spring Boot アプリケーションと MySQL データベース) を実行する方法について説明します。アプリケーションは、データベースにエントリを追加する GET リクエストを受信できます。このチュートリアルでは、ブレークポイントを設定してアプリケーションをデバッグする方法についても説明します。
Spring に関連する機能については、「IntelliJ IDEA で Spring サポートを有効にする」を参照してください。
サンプルプロジェクトのクローンを作成する
アプリケーションのソースコードは、https://github.com/IdeaUJetBrains/SpringBootDockerDemoDebug(英語) の GitHub でホストされています
メインメニューで、
に移動します。リポジトリの URL を指定して、クローンをクリックします。
必要に応じて、クローンプロジェクトを新しいウィンドウで開くことに同意します。
Spring Boot 実行構成の準備
プロジェクトには、Spring Boot アプリケーションを実行する DemoApplication 構成が必要です。デフォルトでは、ローカルで実行されますが、Docker Compose java
サービスからコンテナー上で実行する必要があります。
メインメニューで、
に移動します。実行 / デバッグ構成ダイアログで、DemoApplication 構成を選択し、実行リストを展開して、新しいターゲットの作成の Docker Compose を選択します。
docker-compose.yml ファイルを選択し、次に
java
サービスを選択して、「次へ」をクリックします。IntelliJ IDEA がターゲットイメージをビルドし、Java ホームパスを検出したら、次へをクリックします。
検出された Java ホームパスとバージョンを確認し、作成をクリックします。
新しい
java
サービス実行ターゲットが選択されていることを確認し、変更を DemoApplication 構成に適用します。
実行ターゲットは Dockerfile またはイメージから構成できますが、このチュートリアルでは Docker Compose を使用して同じネットワーク内で 2 つのサービスを実行し、一方のサービスの Java アプリケーションがもう一方のサービスのデータベースにアクセスできるようにします。
データベース実行構成を準備する
同じ docker-compose.yml ファイルで定義された db
サービスからアプリケーションのデータベースを実行する必要があります。その実行構成を作成し、Spring Boot アプリケーションの前に実行するように構成します。
実行 / デバッグ構成ダイアログで、新規構成の追加 をクリックし、Docker Compose を選択します。
この構成に
DatabaseService
のようなわかりやすい名前を付け、docker-compose.yml ファイルを指定して、db
サービスを追加します。変更を新しい構成に適用し、DemoApplication 構成を選択します。
DemoApplication 構成で、「オプションを変更」をクリックし、「起動前タスクの追加」、「別の構成を実行」の順にクリックし、メインアプリケーションの前にデータベースサービスを実行する新しい Docker Compose 構成を追加します。
変更を適用した後、DemoApplication 構成を実行します。
アプリケーションの実行
DemoApplication 構成を実行すると、IntelliJ IDEA はまず db
Docker Compose サービスを開始し、データベースが正常であることを確認します。次に、Spring Boot アプリケーションの実行ターゲットとして java
サービスを開始します。最後に、Spring Boot アプリケーションの実行ターゲットから Java ランタイムを使用します。すべてが正しい場合は、次の出力が表示されるはずです。
Docker がアプリケーションが実行されているコンテナーのポート 8080 に転送するランダムなローカルポート番号に注目してください。上の例では、54123 です。
アプリケーションにアクセスして、http://localhost:54123/entitybus のデータベースに保存されているエンティティを一覧表示できます (この場合、ポート番号を Docker が割り当てたものに置き換えます)。
データベースにランダムなエンティティを追加するには、http://localhost:54123/entitybus/post に GET リクエストを送信します。
データベースに接続する
必要に応じて、jdbc:mysql://0.0.0.0:13306/DOCKERDB で実行中のデータベースに接続できます。
データベースツールウィンドウを開き、次の設定で MySQL データソースを追加します。
- ホスト
localhost
- ポート
13306
- ユーザー
root
- パスワード
root
- データベース
DOCKERDB
アプリケーションをデバッグする
DemoApplication をデバッグモードで実行します。例: 実行構成を選択した状態で、メインツールバーのデバッグボタン をクリックします。
EntitybusController.java ファイルを開き、
postEntity()
メソッド内のどこかにブレークポイントを設定します。例: 27 行目。ブラウザーで http://localhost:54123/entitybus/post (または、この場合に割り当てられたポート Docker) を開きます。
デバッガーはブレークポイントで実行を一時停止する必要があり、変数値やフレームなどの現在の状態を調べることができます。
関連ページ:
Docker
Docker は、分離された再現可能な環境で実行可能ファイルをデプロイおよび実行するためのツールです。これは、たとえば、本番環境と同じ環境でコードをテストする場合に役立ちます。IntelliJ IDEA は Docker 機能を統合し、Docker イメージの作成、Docker コンテナーの実行、Docker Compose アプリケーションの管理、パブリックおよびプライベート Docker レジストリの使用など、IDE から直接実行するための支援を提供します。Docker プラグインを有効にする...
Spring
Spring は、Java プラットフォーム用のアプリケーションフレームワークです。マイクロサービスアーキテクチャ、クラウドシステム、リアクティブ処理、サーバーレスワークロードをサポートする最新の Web アプリケーションを構築できます。IntelliJ IDEA は、専用のプロジェクトウィザード、コードのハイライト、インテリジェントなコンテキストアクション、埋め込みドキュメント、ナビゲーション、高度にカスタマイズ可能な実行構成など、Spring に対する広範なコーディング支援を提供します。サポー...
データベースツールウィンドウ
データベースツールと SQL プラグインを有効にするこの機能は、IntelliJ IDEA にバンドルされており、デフォルトで有効になっているデータベースツールと SQL プラグインに依存しています。関連する機能が利用できない場合は、プラグインを無効にしていないことを確認してください。を押して設定を開き、を選択します。インストール済みタブを開き、データベースツールおよび SQL プラグインを見つけて、プラグイン名の横にあるチェックボックスを選択します。概要:データベースツールウィンドウ (表示...
Docker を使用して Java アプリケーションを実行およびデバッグする
Docker を使用して、特定のランタイム環境を持つコンテナーで Java アプリケーションを実行およびデバッグできます。このチュートリアルでは、単純な Java アプリケーション用に OpenJDK 17 を使用して Docker 実行ターゲットを作成する方法について説明します。新規 Java プロジェクトを作成するこのチュートリアルのサンプルアプリケーションは、をコンソールに出力して終了する単一の HelloWorld.java ファイルで構成されます。メインメニューで、に移動します。新しいプロジ...
アプリケーションサーバーコンテナー内に JavaWeb アプリケーションをデプロイする
Docker を使用して、アプリケーションサーバー(Tomcat、Wildfly など)を実行し、JavaWeb アプリケーションをそのサーバーにデプロイできます。このチュートリアルでは、単純な Java Web アプリケーションを作成し、デプロイ可能な Web アプリケーションリソース(WAR)ファイルを作成して、Docker コンテナーとして実行されているアプリケーションサーバー内にデプロイする方法について説明します。Java Web アプリケーションを作成するメインメニューで、に移動する...