Spring Boot 3.1 부터 개발자도구에 Docker Compose 연동을 지원한다.
스프링 공식 블로그에도 관련 소개글을 확인할 수 있다.
일반적으로 docker compose 는 "docker-compose up" 으로 실행하고 "docker-compose down" 으로 컨테이너를 중지시킨다. Spring Boot 3.1 부터는 Docker Compose 명령어를 위임하여 사용할 수 있다. Spring Boot 어플리케이션이 시작되거나 중지되는 동안 컨테이너 관리도 같이 하게 된다는 의미이다.
디펜던시 설정
spring initializr 에서 프로젝트 구성시 Dependencies 에서 Docker Compose Support 를 추가하면 된다. (매우 간단하다.)
dependencies {
...
developmentOnly 'org.springframework.boot:spring-boot-docker-compose'
}
spring-boot-docker-compose 종속성이 추가되면 다음과 같은 동작을 한다.
- 어플리케이션 디렉토리에서 compose.yaml 파일을 찾는다. (application.properties 에서 파일명 별도지정 가능)
- 검색된 compose.yaml 파일을 기준으로 docker-compose up 명령을 실행한다.
- 지원되는 각 컨테이너에 대한 서비스 연결을 생성한다.
- 어플리케이션이 shutdown 될 때 docker-compose stop 명령을 실행한다.
Spring Docker Compose 는 테스트 수행 시 disabled 가 기본값으로 설정되어 있다.
(spring.docker.compose.skip.in-tests=false)
Service Connections
Spring Boot Auto Configuration 에서 기본적으로 정의해 놓은 컨테이너 서비스 이름을 사용하여 설정됩니다. 현재 지원되는 목록은 다음과 같습니다.
| Connection Details | Matched On |
| ActiveMQConnectionDetails | "symptoma/activemq" |
| CassandraConnectionDetails | "cassandra" |
| ElasticsearchConnectionDetails | "elasticsearch" |
| JdbcConnectionDetails | "gvenzl/oracle-free" "gvenzl/oracle-xe" "mariadb" "mssql/server" "mysql" "postgre" |
| MongoConnectionDetails | "mongo" |
| Neo4jConnectionDetails | "neo4j" |
| OtlpMetricsConnectionDetails | "otel/opentelemetry-collector-contrib" |
| OtlpTracingConnectionDetails | "otel/opentelemetry-collector-contrib" |
| PulsarConnectionDetails | "apachepulsar/pulsar" |
| R2dbcConnectionDetails | "gvenzl/oracle-free" "gvenzl/oracle-xe" "mariadb" "mssql/server" "mysql" "postgres" |
| RabbitConnectionDetails | "rabbitmq" |
| RedisConnectionDetails | "redis" |
| ZipkinConnectionDetails | "openzipkin/zipkin" |
각각의 Connection Details 에 해당하는 컨테이너 명을 Match On 에 기재된 이름으로 명시해줘야 자동으로 연결된다.
만약, 종속성으로 mariadb 를 추가하면 compose.yaml 파일의 서비스명에 "mariadb" 와 함께 관련 설정이 추가된다.
services:
mariadb:
image: 'mariadb:latest'
environment:
- 'MARIADB_DATABASE=mydatabase'
- 'MARIADB_PASSWORD=secret'
- 'MARIADB_ROOT_PASSWORD=verysecret'
- 'MARIADB_USER=myuser'
ports:
- '3306'
Compose 파일 변경하기
만약, compose 파일을 특정 디렉토리에서 별도의 이름으로 관리하는 경우 spring.docker.compose.file 속성에 관련정보를 정의한다.
spring.docker.compose.file=../my-compose.yml
Docker Compose Lifecycle
기본적으로 spring boot 어플리케이션이 시작될 때 docker-compose up 을 호출하고, 중지될 때 docker-compose stop 을 호출한다. 이와 다른 형태의 lifecycle 을 관리하고자 할 때, spring.docker.compose.lifecycle-management 속성을 사용할 수 있다.
- none: docker compose 를 시작하거나 중지하지 않는다.
- start-only: 어플리케이션이 실행될 때만 docker compose 를 실행한다.
- start-and-stop: 어플리케이션이 실행될 때 docker compose 를 시작하고, 중지될 때 docker compose 를 중지한다.
spring.docker.compose.lifecycle-management=start-and-stop
spring.docker.compose.start.command=start
spring.docker.compose.stop.command=down
spring.docker.compose.stop.timeout=1,
Docker Compose Profiles 활성화하기
스프링 프로파일과 유사하게 Docker Compose 프로파일을 spring.docker.compose.profiles.active 속성에 지정할 수 있다.
spring.docker.compose.profiles.active=myprofile