🌿
Spring Boot 3.1.0-RC2のDocker Compose対応を試した
Spring Boot 3.1.0-RC2でDocker Composeへ対応されました。
どんな感じなのか試してみました。
クラスパスにspring-boot-docker-compose
があるとspring-boot:run
実行時に自動でDocker Composeを使用してコンテナを起動してくれるみたいです。
pom.xml
へ次のdependency
を追加しました。
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-docker-compose</artifactId>
<optional>true</optional>
</dependency>
compose.yaml
は次の通りです。
services:
db:
image: postgres
ports:
- 5432
environment:
POSTGRES_PASSWORD: pass1234
ports
ではホスト側のポートを明記しなくても大丈夫です。
また、application.properties
へspring.datasource.*
系のプロパティ(url
など)も書いておかなくても大丈夫です。
次のクラスたちが良い感じにプロパティを組み立ててくれます。
org.springframework.boot.docker.compose.service.connection.DockerComposeServiceConnectionsApplicationListener
org.springframework.boot.docker.compose.service.connection.postgres.PostgresJdbcDockerComposeConnectionDetailsFactory.PostgresJdbcDockerComposeConnectionDetails
org.springframework.boot.docker.compose.service.connection.jdbc.JdbcUrlBuilder
./mvnw spring-boot:run
でアプリケーションを起動するとDocker Composeでコンテナが起動されていることがわかります(横に長いためログから日時とログレベルは削除しています)。
[restartedMain] .s.b.d.c.l.DockerComposeLifecycleManager : Found Docker Compose file '/path/to/compose.yaml'
[OutputReader-stderr] o.s.boot.docker.compose.core.DockerCli : Network app_default Creating
[OutputReader-stderr] o.s.boot.docker.compose.core.DockerCli : Network app_default Created
[OutputReader-stderr] o.s.boot.docker.compose.core.DockerCli : Container app-db-1 Creating
[OutputReader-stderr] o.s.boot.docker.compose.core.DockerCli : Container app-db-1 Created
[OutputReader-stderr] o.s.boot.docker.compose.core.DockerCli : Container app-db-1 Starting
[OutputReader-stderr] o.s.boot.docker.compose.core.DockerCli : Container app-db-1 Started
[OutputReader-stderr] o.s.boot.docker.compose.core.DockerCli : Container app-db-1 Waiting
[OutputReader-stderr] o.s.boot.docker.compose.core.DockerCli : Container app-db-1 Healthy
アプリケーションが起動している状態でdocker compose ps
を実行するとコンテナが起動していることがわかります。
$ docker compose ps
NAME COMMAND SERVICE STATUS PORTS
app-db-1 "docker-entrypoint.s…" db running 0.0.0.0:49170->5432/tcp, :::49170->5432/tcp
control + c
でアプリケーションを停止した状態でdocker compose ps
を実行するとコンテナも停止していることがわかります。
$ docker compose ps
NAME COMMAND SERVICE STATUS PORTS
app-db-1 "docker-entrypoint.s…" db exited (0)
JDBC関連プロパティの設定やコンテナの起動・停止などの手間が減って地味にめちゃくちゃ嬉しい気がしました。
以上です。
コード例
Discussion