エキサイト株式会社メディア事業部エンジニア佐々木です。メディア事業部では、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