[Spring] devtools - Docker Compose Support

1

SpringBoot Developer Tools로 제공되는 Docker Compose Support가 있길래 한번 써봤다.

proejct setting

dependency

dependencies {
    developmentOnly("org.springframework.boot:spring-boot-docker-compose")
}

spring initializr 를 이용해 프로젝트를 생성하고 나면

project structure

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
DockerComposeProperties

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

마치며

스프링은 신이다.

0개의 댓글