明日からできるSpringBoot Docker Compose Support を使用しローカル環境開発整備をラクにする

エキサイト株式会社メディア事業部エンジニア佐々木です。メディア事業部では、Docker Composeを使用して、ローカル環境での開発を行っております。SpringBoot3.1よりDocker Compose Supportがリリースされていますので、明日から使ってみましょう。

前提

下記、環境は必要になります。

Java 17以上
SpringBoot 3.1以上
Docker Compose CLI 

Gradle or Maven

ディレクトリ構成

下記のようなディレクトリ構成になっています。 root階層にcompose.yamlがあり、SpringBootはこれを読み取ってDockerを起動します。

.
├── build.gradle
├── compose.yaml
├── settings.gradle
└── src
    └── main
        ├── java
        │   └── jp
        │       └── co
        │           └── excite
        │               └── techblog
        │                   └── TechblogApplication.java
        └── resources
            └── application.yml

compose.yaml

特別なことはなく、Docker Compose のスタンダードなyamlを置くだけになります。

services:
  postgres:
    image: 'postgres:latest'
    environment:
      - 'POSTGRES_DB=mydatabase'
      - 'POSTGRES_PASSWORD=secret'
      - 'POSTGRES_USER=myuser'
    ports:
      - '5432'

build.gradle

通常のSpringBootで使用するbuild.gradleに、下記を追加するのみになります。

dependencies {
  ...
    developmentOnly 'org.springframework.boot:spring-boot-docker-compose'   <-- 追加
  ... 
}

実行

下記コマンドを実行するだけになります。

$ ./gradlew bootRun


  .   ____          _            __ _ _
 /\\ / ___'_ __ _ _(_)_ __  __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
 \\/  ___)| |_)| | | | | || (_| |  ) ) ) )
  '  |____| .__|_| |_|_| |_\__, | / / / /
 =========|_|==============|___/=/_/_/_/

 :: Spring Boot ::                (v3.4.0)

2024-12-09T08:56:43.131+09:00  INFO 53580 --- [techblog] [  restartedMain] j.c.excite.techblog.TechblogApplication  : Starting TechblogApplication using Java 21.0.3 with PID 53580 (/Users/kohei.sasaki/git/springboot-techblog/build/classes/java/main started by kohei.sasaki in /Users/kohei.sasaki/git/springboot-techblog)
2024-12-09T08:56:43.132+09:00  INFO 53580 --- [techblog] [  restartedMain] j.c.excite.techblog.TechblogApplication  : No active profile set, falling back to 1 default profile: "default"
2024-12-09T08:56:43.154+09:00  INFO 53580 --- [techblog] [  restartedMain] .e.DevToolsPropertyDefaultsPostProcessor : Devtools property defaults active! Set 'spring.devtools.add-properties' to 'false' to disable
2024-12-09T08:56:43.154+09:00  INFO 53580 --- [techblog] [  restartedMain] .e.DevToolsPropertyDefaultsPostProcessor : For additional web related logging consider setting the 'logging.level.web' property to 'DEBUG'

--- compose.yaml 読み込み起動開始  ----

2024-12-09T08:56:43.168+09:00  INFO 53580 --- [techblog] [  restartedMain] .s.b.d.c.l.DockerComposeLifecycleManager : Using Docker Compose file /Users/kohei.sasaki/git/springboot-techblog/compose.yaml
2024-12-09T08:56:43.716+09:00  INFO 53580 --- [techblog] [utReader-stderr] o.s.boot.docker.compose.core.DockerCli   :  Container springboot-techblog-postgres-1  Created
2024-12-09T08:56:43.717+09:00  INFO 53580 --- [techblog] [utReader-stderr] o.s.boot.docker.compose.core.DockerCli   :  Container springboot-techblog-postgres-1  Starting
2024-12-09T08:56:43.809+09:00  INFO 53580 --- [techblog] [utReader-stderr] o.s.boot.docker.compose.core.DockerCli   :  Container springboot-techblog-postgres-1  Started
2024-12-09T08:56:43.809+09:00  INFO 53580 --- [techblog] [utReader-stderr] o.s.boot.docker.compose.core.DockerCli   :  Container springboot-techblog-postgres-1  Waiting
2024-12-09T08:56:44.324+09:00  INFO 53580 --- [techblog] [utReader-stderr] o.s.boot.docker.compose.core.DockerCli   :  Container springboot-techblog-postgres-1  Healthy

--- Docker Compose 起動完了  ----

ちゃんとDockerも立ち上がっています。

$ dokcer ps 

CONTAINER ID   IMAGE             COMMAND                  CREATED          STATUS          PORTS                     NAMES
142799eee3d6   postgres:latest   "docker-entrypoint.s…"   46 minutes ago   Up 7 minutes    0.0.0.0:51038->5432/tcp   springboot-techblog-postgres-1

データベースの接続等は自動でバインドしてくれます。もちろん指定もできます。

細かい設定は、application.ymlで可能

細かい設定はapplication.ymlの方で設定できます。

spring:
  docker:
    compose:
      file: ./compose.yaml   # ファイル名指定
      stop:
        command: stop  # 停止時のコマンド(stop/down)
        timeout: 10s  # timeout値
      skip:
        in-tests: true   # test実行時の挙動(true/false)
      start:
        log-level: debug # ログレベル

まとめ

ローカルでの開発環境は、コンテナを使うと便利になりますが、SpringBootのDocker Compose Supportを使用するとさらに便利になります。compose.yamlがありましたら導入は簡単ですので、ぜひおためしいただければと思います。

さいごに

エキサイトではフロントエンジニア、バックエンドエンジニア、アプリエンジニアを随時募集しております。長期インターンも歓迎していますので、興味があれば連絡いただければと思います。

募集職種一覧はこちらになります!(カジュアルからもOK) www.wantedly.com