Slog
Sign in

docker-compose를 이용하여 Spring Boot + MariaDB 간단하게 배포하기

2021 Feb 18
2 min read
docker-compose를 이용하여 Spring Boot + MariaDB 간단하게 배포하기

안녕하세요 오늘은 Spring Boot + MariaDB 로 이루어진 프로젝트를 docker-compose 를 이용하여 간편하게 배포하는 방법을 알아보도록 하겠습니다.

들어가기 전에

Docker컨테이너 기반의 오픈소스 가상화 플랫폼 입니다.

여기서 컨테이너 는 격리된 공간에서 프로세스가 동작하는 기술로 이해하시면 되겠습니다.

도커의 장점

  • 쉽고 빠른 배포환경 구축
  • 가볍고 빠른 실행 속도
  • Docker hub 라는 공유환경 제공

등등 많은 장점들이 있어 배포를 할 때 Docker 를 많이 이용합니다.

그럼 지금부터 이 Docker 를 이용해서 SpringBoot + MariaDB 서버를 배포 해 보도록 하겠습니다.

배포 환경 구축

Docker 를 다운받지 않은 분들은 다운받아 주세요 [[ubuntu 18.04에서 다운로드]](https://hiseon.me/linux/ubuntu/install-docker/)

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 다운로드]](https://psychoria.tistory.com/651)

이번에도 마찬가지로 프로젝트 루트 디렉토리에 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 부분에서 기본 charsetutf8mb4 (이모지 + 한글 지원) 으로 설정해줍니다.

ports 부분은 컨테이너의 내부포트와 외부포트를 연결해주는 부분입니다.

application 서비스를 보면, 마찬가지로 환경변수로 database url을 지정해 주는 모습을 볼 수 있습니다.

이 때 ip 주소 부분에 ip 주소가 아닌, service 이름으로 적어야 합니다.

ports 부분은 똑같이 포트 연결 부분이고, depends_ondatabase 라는 서비스와의 의존성이 만들어집니다. 의존성이 생기면 database 가 켜져 있어야 실행됩니다.

실행

이제 구성은 다 했으니 실행하는 부분만 남았습니다.

docker-compose up

커맨드를 입력 하면 실행됩니다.

백그라운드에서 실행하고 싶으시면 -d 옵션을 붙이면 됩니다.

마치며

오늘은 진짜 간단하게 docker를 이용해서 SpringBoot + MariaDB 서버를 배포하는 방법에 대해 알아보았습니다. 원래 엄청 귀찮게 수작업으로 배포를 하다가 docker를 만나니 배포에 훨씬 적은 시간이 들게 되었네요.

Explore Popular Contents