SpringBoot Developer Tools로 제공되는 Docker Compose Support가 있길래 한번 써봤다.
dependencies {
developmentOnly("org.springframework.boot:spring-boot-docker-compose")
}
spring initializr 를 이용해 프로젝트를 생성하고 나면
demo(proejct root)
├─ ./src
├─ ./...
└─ ./compose.yaml
compose.yaml
파일이 root path
에 포함된다.
docker-compose-redis.yml
version: '3'
services:
redis:
image: redis:alpine
container_name: redis-token-store
ports:
- "6379:6379"
command: redis-server --port 6379
labels:
- "name=redis"
- "mode=standalone"
해당 파일에 내용을 채워서 기동시켜봤는데
java.lang.IllegalStateException: No Docker Compose file found in directory '${dir}/.'
를 만났다. cli로 정상 기동되는 파일이었기 때문에 내가 적용한 docker-compose-redis.yml
파일명이 문젠가 싶어서 원래 포함되어있던 compose.yaml
이름으로 변경했더니 동작했다.
아무튼 당연하게도(?) 내가 지정한 파일명을 읽게해주고 싶었기 때문에 configuration properties
가 있을 것 같았고, 있었다.
DockerComposeLifecycleManager.java
DockerComposeProperties.java
configuration properties
DockerComposeLifecycleManager.java
해당 메서드에서 컴포즈 파일을 찾는 분기가 작성되어 있다. spring.docker.compose.file이 null이면 workingDirectory에서 찾는다.
DockerComposeFile.java
주석 보면 상세하게 설명되어 있다. 위 4가지 패턴만 인식한다.
코드 짠거 하나도 없다..
그냥 configuration properties 조차 파일명만 맞춰줬다면 그냥 컨테이너를 알아서 관리한다.
파일명을 명시적으로 쓰고 싶다면
# application.properties
spring.docker.compose.file=my-compose.yml
# application.yml
spring:
docker:
compose:
file: my-compose.yml
스프링은 신이다.