Docker Compose を使用して Spring Boot アプリケーションを実行およびデバッグする
IntelliJ IDEA を使用すると、Docker Compose の複数の Docker コンテナーで実行されている Spring Boot アプリケーションを実行およびデバッグできます。 このチュートリアルでは、同じ仮想ネットワーク内のコンテナー内で 2 つの Docker Compose サービス (単純な Spring Boot アプリケーションと MySQL データベース) を実行する方法について説明します。 アプリケーションは、データベースにエントリを追加する GET 要求を受信できます。 このチュートリアルでは、ブレークポイントを設定してアプリケーションをデバッグする方法についても説明します。
Spring に関連する機能については、「IntelliJ IDEA で Spring サポートを有効化する 」を参照してください。
サンプルプロジェクトのクローンを作成する
アプリケーションのソースコードは、GitHub の https://github.com/IdeaUJetBrains/SpringBootDockerDemoDebug でホストされています。
メインメニューで へ移動します。
リポジトリの URL を指定して、 クローン をクリックします。
必要に応じて、クローンプロジェクトを新しいウィンドウで開くことに同意します。

Spring Boot 実行構成の準備
プロジェクトには、Spring Boot アプリケーションを実行する DemoApplication 構成が必要です。 デフォルトではローカルで実行されますが、Docker Compose java サービスからコンテナー上で実行する必要があります。
メインメニューで へ移動します。
実行/デバッグ構成 ダイアログで DemoApplication 構成を選択し、 実行場所 リストを展開して、 新しいターゲットの作成 の下にある Docker Compose を選択します。

docker-compose.yml ファイルを選択し、次に
javaサービスを選択して、 次へ をクリックします。
IntelliJ IDEA がターゲットイメージをビルドし、Java ホームパスを検出したら、 次へ をクリックします。
検出された Java ホームパスとバージョンを確認し、 作成(C) をクリックします。
新しい
javaサービス実行ターゲットが選択されていることを確認し、 DemoApplication 構成へ変更を適用します。
実行ターゲットは Dockerfile またはイメージから構成できますが、このチュートリアルでは Docker Compose を使用して同じネットワーク内で 2 つのサービスを実行し、一方のサービスの Java アプリケーションがもう一方のサービスのデータベースにアクセスできるようにします。
データベース実行構成を準備する
同じ docker-compose.yml ファイルで定義された db サービスからアプリケーションのデータベースを実行する必要があります。 その実行構成を作成し、Spring Boot アプリケーションの前に実行するように構成します。
実行/デバッグ構成 ダイアログで、 新規構成の追加
をクリックし、 Docker Compose を選択します。
この構成に
DatabaseServiceのようなわかりやすい名前を付け、 docker-compose.yml ファイルを指定し、dbサービスを追加します。
変更を新しい構成に適用し、 DemoApplication 構成を選択します。
DemoApplication 構成で オプションを変更(M) をクリックし、 起動前タスクの追加 を選択した後、 別の構成を実行 をクリックして、メイン アプリケーションの前にデータベース サービスを実行する新しい 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 が割り当てたポート)を開きます。
デバッガーはブレークポイントで実行を一時停止する必要があり、変数値やフレームなどの現在の状態を調べることができます。
