Spring boot + mysql 구조의 개발을 한다고 한다.
Dockerfile
로 각각 만들어 올리는 방법도 있지만, 장비가 증설되면 각 컨데이너 설정을 다시 해줘야한다는 불편함이 있다.
Docker compose
를 이용해 멀티 컨테이너 환경을 구성하고자 한다.
먼저 spring boot 프로젝트를 빌드하여 *.jar 파일을 준비한다.
Spring boot에 관련한 도커 이미지를 만들기 위한 Dockerfile
을 작성한다.
자세한 내용은 이 글에서 볼 수 있다.
FROM openjdk:11
ARG JAR_FILE=build/libs/*.jar
COPY ${JAR_FILE} app.jar
ENTRYPOINT ["java","-jar","/app.jar"]
Docker에서 사용하는 컨테이너를 한 곳에서 관리하기 위해 docker-compose.xml
을 작성한다.
version : "3"
services:
spring-db:
container_name: spring-db
image: mysql:8.0.13
restart: always
environment:
- MYSQL_DATABASE=test
- MYSQL_ROOT_PASSWORD=testpw
- MYSQL_ROOT_HOST=%
- TZ=Asia/Seoul
command:
- --lower_case_table_names=1
- --character-set-server=utf8mb4
- --collation-server=utf8mb4_unicode_ci
volumes:
- ./db/data:/var/lib/mysql:rw
ports:
- 3306:3306
spring-app:
container_name: spring-app
build: .
environment:
SPRING_DATASOURCE_URL: jdbc:mysql://spring-db:3306/test?characterEncoding=UTF-8&serverTimezone=Asia/Seoul
SPRING_DATASOURCE_USERNAME: root
SPRING_DATASOURCE_PASSWORD: testpw
ports:
- 80:80
depends_on:
- spring-db
여기서 사용한 명령어에 대해서는 이 글에서 확인할 수 있다.
이제 docker-compose
를 실행한다. 그러면 필요한 image들을 다운로드 받고 작성한 명령어대로 컨테이너를 생성해준다.
sudo docker-compose up -d
더이상 컨테이너를 사용하지 않는다면
sudo docker-compose down
명령어를 통해 docker-compose.yml
에 등록된 컨테이너가 삭제되고 네트워크 구성이 해제된다.
jar 파일 변경시
sudo docker-compose down
sudo docker-compose build --no-cache
sudo docker-compose up -d
실행중인 컨테이너의 로그를 보고 싶다면 docker logs
명령어를 이용하면 된다.
sudo docker logs [컨테이너명]
reference
Docker compose로 Spring Boot 올리기
[Docker] Docker Compose build