このページで解説している内容は、以下の YouTube 動画の解説で見ることができます。
【Docker入門】Spring Bootコンテナ②
「Spring Bootコンテナ①」の続きです。Docker Composeコマンドを使ったSpring Bootの開発環境コンテナの構築例を紹介しています。
「Spring Bootの開発環境コンテナ」は次の2部に分けて解説していきます。
ここでは、Spring Boot コンテナの作成に必要な「compose.yaml」ファイルを作成して、Spring Bootアプリケーションを実行します。
Spring Boot コンテナの構成
以下のように「Spring Boot」コンテナを構成します。
Spring Boot コンテナのデータはホストマシンの「./demo」ディレクトリにバインドマウントさせます。
不要なDockerオブジェクトの削除
まず、不要なDockerオブジェクトをすべて削除しておきます。
以下のコマンドを実行します。
・「docker system prune -a」コマンドを実行します。
Are you sure you want to continue? [y/N] の質問には「y」と入力します。
PS C:\Users\joeac> docker system prune -a
WARNING! This will remove:
- all stopped containers
- all networks not used by at least one container
- all images without at least one container associated to them
- all build cache
Are you sure you want to continue? [y/N] y
Deleted Containers:
(略)
・「docker system prune -a」コマンドで削除されなかったDockerオブジェクトは、個別に削除しておきます。
環境によって削除されずに残っているDockerオブジェクトは異なります。
ディレクトリの作成と移動
Docker Composeでコンテナを作成するには、「compose.yaml」ファイルが必要になります。
デフォルトでは、カレントディレクトリにある「compose.yaml」ファイルが読み込まれるため、作業ディレクトリに移動しておきます。
・「cd desktop/docker」コマンドを実行します。
PS C:\Users\joeac> cd desktop/docker
PS C:\Users\joeac\Desktop\docker>
「compose.yaml」ファイルを保存する「springboot」ディレクトリを作成して、作成したディレクトリに移動します。次のコマンドを実行します。
- 「mkdir springboot」コマンド
- 「cd springboot」コマンド
PS C:\Users\joeac\Desktop\docker> mkdir springboot
Directory: C:\Users\joeac\Desktop\docker
Mode LastWriteTime Length Name
---- ------------- ------ ----
d---- 2024/04/27 23:25 springboot
PS C:\Users\joeac\Desktop\docker> cd springboot
PS C:\Users\joeac\Desktop\docker\springboot>
「demo」フォルダの移動
・「demo」ディレクトリを「springboot」ディレクトリ内に移動させます。
compose.yamlの作成
VSCodeで「compose.yaml」ファイルを作成します。
・「code compose.yaml」コマンドを実行します。
PS C:\Users\joeac\Desktop\docker\phpdev2> code compose.yaml
VSCodeが起動します。
「compose.yaml」ファイルの編集
・「compose.yaml」ファイルを以下のように編集して保存します。
services:
web:
image: openjdk:17
container_name: spring_container
command : ./mvnw spring-boot:run
ports:
- "8080:8080"
volumes:
- ./demo:/demo
working_dir: /demo
定義内容の解説
「compose.yaml」ファイルの定義を解説します。
キー | 説明 |
---|---|
services | アプリケーションを構成するサービスを定義するためのキーです。 |
web | サービスの名前です。これはアプリケーションのコンテナの役割をします。 |
image | このサービスで使用する Docker イメージを指定します。ここでは openjdk:17 が指定されており、これは Java 17 がインストールされた OpenJDK イメージです。 |
container_name | このサービスを実行するコンテナに割り当てる名前です。この場合、spring_container という名前が指定されています。 |
command | コンテナが起動する際に実行されるコマンドです。ここでは「 ./mvnw spring-boot:run 」 が実行されており、Maven Wrapper (mvnw ) を使用して Spring Boot アプリケーションが起動します。 |
ports | ホストとコンテナのポートのマッピングを指定します。ここでは、ホストのポート 8080 をコンテナのポート 8080 にマッピングしています。 |
volumes | ホストのディレクトリまたは名前付きボリュームをコンテナにマウントします。ここでは、ホストの「./demo 」ディレクトリをコンテナ内の 「/demo 」 ディレクトリにマウントしています。 |
working_dir | コンテナ内の作業ディレクトリを設定します。ここでは「/demo 」 に設定されており、コンテナ内で実行されるコマンドがこのディレクトリで実行されます。 |
つまり、この docker-compose.yaml
ファイルは、web
という名前のサービスを定義しています。このサービスは openjdk:17
の Docker イメージを使用し、Maven Wrapper を使って 「./mvnw spring-boot:run
」 を実行して Spring Boot アプリケーションを起動します。
コンテナの名前は spring_container
であり、ホストのポート 8080
がコンテナのポート 8080
にマッピングされます。さらに、ホストの 「./demo
」ディレクトリがコンテナ内の /demo
ディレクトリにマウントされ、コンテナ内の作業ディレクトリが 「/demo
」に設定されます。
③「./mvnw spring-boot:run」コマンドの実行
コンテナを作成して、実行していきます。
compose.yamlで「command : ./mvnw spring-boot:run」と定義しています。コンテナが実行されると、このコマンドが実行されてSpring Bootアプリケーションが起動します。
コンテナの作成と実行
・「docker compose up -d」コマンドを実行します。
このコマンドは、「compose.yaml」ファイルを配置した場所で実行する必要があります。
PS C:\Users\joeac\Desktop\docker\springboot> docker compose up -d
[+] Running 4/4
✔ web Pulled 9.2s
✔ 38a980f2cc8a Pull complete 2.2s
✔ de849f1cfbe6 Pull complete 1.3s
✔ a7203ca35e75 Pull complete 4.6s
[+] Running 2/2
✔ Network springboot_default Created 0.0s
✔ Container spring_container Started 0.3s
「Container spring_container Started」と表示され、Spring Bootコンテナが起動します。
Spring Bootアプリケーションの実行
Spring Bootアプリケーションを実行します。
・Webブラウザを起動して、URLに「localhost:8080」と入力します。
「Hello Spring」と表示されます。
「このページは動作しません」というエラーが表示される場合があります。Spring Bootコンテナの起動には、しばらく時間がかかります。しばらく時間を空けてから、ホームページをリロードしてみましょう。