docker-compose를 이용하여 Spring Boot + MariaDB 간단하게 배포하기
2 min read
안녕하세요 오늘은 Spring Boot + MariaDB 로 이루어진 프로젝트를 docker-compose
를 이용하여 간편하게 배포하는 방법을 알아보도록 하겠습니다.
들어가기 전에
Docker
는 컨테이너
기반의 오픈소스 가상화 플랫폼 입니다.
여기서 컨테이너
는 격리된 공간에서 프로세스가 동작하는 기술로 이해하시면 되겠습니다.
도커의 장점
- 쉽고 빠른 배포환경 구축
- 가볍고 빠른 실행 속도
Docker hub
라는 공유환경 제공
등등 많은 장점들이 있어 배포를 할 때 Docker
를 많이 이용합니다.
그럼 지금부터 이 Docker
를 이용해서 SpringBoot + MariaDB
서버를 배포 해 보도록 하겠습니다.
배포 환경 구축
Docker
를 다운받지 않은 분들은 다운받아 주세요 [ubuntu 18.04에서 다운로드]
Dockerfile 구성
우선 프로젝트 루트 디렉토리에 Dockerfile
이라는 파일을 만들어 줍니다.
# 서버를 구동시킬 자바를 받아옵니다. FROM java:8 # `JAR_FILE` 이라는 이름으로 build 한 jar 파일을 지정합니다. ARG JAR_FILE=./build/libs/*.jar # 지정한 jar 파일을 app.jar 라는 이름으로 Docker Container에 추가합니다. ADD ${JAR_FILE} app.jar # app.jar 파일을 실행합니다. ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"]
이렇게 되면 docker build -t server .
이렇게 빌드 하여도 되지만, 빌드 후 실행
또 MariaDB까지 같이 하기엔 생각보다 시간이 소요됩니다.
그래서 docker-compose
라는 것을 이용합니다.
docker-compose 구성
우선 docker-compose
를 다운받아 줍니다. [docker-compose 다운로드]
이번에도 마찬가지로 프로젝트 루트 디렉토리에 docker-compose.yml
파일을 만들어 줍니다.
version: "3.2" services: database: container_name: database image: mariadb volumes: - ~/docker/mariadb/etc/mysql/conf.d:/etc/mysql/conf.d:ro - ~/docker/mariadb/var/lib/mysql:/var/lib/mysql - ~/docker/mariadb/var/log/maria:/var/log/maria environment: - MYSQL_DATABASE=database_name - MYSQL_ROOT_PASSWORD=1234 - MYSQL_ROOT_HOST=% command: ['--character-set-server=utf8mb4', '--collation-server=utf8mb4_unicode_ci'] ports: - 3306:3306 application: build: . environment: SPRING_DATASOURCE_URL: jdbc:mariadb://database:3306/database_name?useUnicode=true SPRING_DATASOURCE_USERNAME: root SPRING_DATASOURCE_PASSWORD: password ports: - 8080:8080 depends_on: - database
이렇게 구성하시면 database
, application
총 2개의 서비스가 만들어집니다.
database
는 mariadb 로 실행 되며 volume
를 연결하여 데이터가 보관되도록 하였습니다.
환경변수로 기본 데이터 베이스, 루트 비밀번호, 연결가능 호스트를 지정 해 준 뒤
command
부분에서 기본 charset
을 utf8mb4 (이모지 + 한글 지원)
으로 설정해줍니다.
ports
부분은 컨테이너의 내부포트와 외부포트를 연결해주는 부분입니다.
application
서비스를 보면, 마찬가지로 환경변수로 database url을 지정해 주는 모습을 볼 수 있습니다.
이 때 ip 주소 부분에 ip 주소가 아닌,
service
이름으로 적어야 합니다.
ports
부분은 똑같이 포트 연결 부분이고, depends_on
은 database
라는 서비스와의 의존성이 만들어집니다.
의존성이 생기면 database
가 켜져 있어야 실행됩니다.
실행
이제 구성은 다 했으니 실행하는 부분만 남았습니다.
docker-compose up
커맨드를 입력 하면 실행됩니다.
백그라운드에서 실행하고 싶으시면 -d
옵션을 붙이면 됩니다.
마치며
오늘은 진짜 간단하게 docker를 이용해서 SpringBoot + MariaDB 서버를 배포하는 방법에 대해 알아보았습니다. 원래 엄청 귀찮게 수작업으로 배포를 하다가 docker를 만나니 배포에 훨씬 적은 시간이 들게 되었네요.