Spring Boot Project, 배포하기 with Docker-compose

Jihu Kim·2025년 1월 19일
post-thumbnail

Docker-compose

이전에는 Docker 이미지를 생성(docker build -t <도커계정 이름>/<이미지 이름> <파일경로>), 컨테이너 생성(docker run --name <사용할 컨테이너 이름> -d -p 8080:8080 <도커계정 이름>/<이미지 이름>), 네트워크 생성(docker network create <네트워크이름>), 네트워크 연결(docker network connect <네트워크 이름> <컨테이너 이름>) 등의 작업을 일일히 수행하는 번거로움이 있었다.

Docker Compose는 이러한 과정들을 docker-compose.yml파일에 정의해 효율적으로 관리할 수 있도록 해준다.

Docker compose를 사용해 배포하는 과정

  1. Dockerfile 작성
  2. docker-compose.yml 작성
  3. JAR 파일 빌드
  4. Docker Compose 실행

1. Dockerfile 작성하기

프로젝트의 루트 디렉토리에 Dockerfile을 작성하고, 빌드 폴더 디렉토리의 JAR 파일을 복사하도록 한다.

# 1. OpenJDK 기반 이미지 사용
FROM openjdk:17

# 2. JAR 파일 복사
# 빌드된 JAR 파일을 컨테이너로 복사합니다.
ARG JAR_FILE=build/libs/*.jar
COPY ${JAR_FILE} app.jar

# 3. 애플리케이션 실행 명령
ENTRYPOINT ["java", "-jar", "/app.jar"]

2. docker-compose.yml 파일 작성하기

프로젝트의 루트 디렉토리에 docker-compose.yml을 작성하고, Docker와 관련된 작업들을 정의한다.

  • 버전

    • version: "4": Docker Compose의 버전을 지정.
  • 서비스

    • database: MariaDB를 실행하는 컨테이너.
      • 이미지: mariadb 공식 이미지 사용.
      • 외부에서 MariaDB에 접근하려면 localhost:3307 사용.
      • 데이터를 유지하기 위해 볼륨(mariadb-data) 사용.
      • MariaDB 환경변수:
        • MARIADB_ROOT_PASSWORD: MariaDB 관리자 비밀번호.
        • MARIADB_DATABASE: 초기 생성할 데이터베이스 이름.
    • app: Spring Boot 애플리케이션 실행 컨테이너.
      • Dockerfile을 사용해 이미지를 빌드하고 실행.
      • 애플리케이션 접근: localhost:8080.
      • 데이터베이스 서비스(database)와 연결.
  • 네트워크

    • my-network: 두 컨테이너가 통신할 수 있도록 연결하는 네트워크.
  • 볼륨

    • mariadb-data: MariaDB 데이터를 저장해 컨테이너가 재시작되어도 데이터 유지.
version: "4" # Docker Compose 버전

services:
  database: # MariaDB 컨테이너 설정
    image: mariadb
    container_name: my-mariadb # MariaDB 컨테이너 이름
    ports:
      - "3307:3306" # 외부 포트 3307을 컨테이너 포트 3306에 연결
    environment:
      MARIADB_ROOT_PASSWORD: <DB 비밀번호> # MariaDB root 비밀번호
      MARIADB_DATABASE: <DB 테이블 이름> # 기본 생성할 데이터베이스 이름
    networks:
      - my-network # 사용자 정의 네트워크에 연결
    restart: always # MariaDB가 중단되면 자동으로 재시작
    volumes:
      - mariadb-data:/var/lib/mysql # 데이터를 컨테이너 외부에 유지

  app: # Spring Boot 애플리케이션 컨테이너 설정
    build: # Dockerfile을 사용해 이미지 빌드
      context: . # 현재 디렉토리를 빌드 컨텍스트로 사용
      dockerfile: Dockerfile # 사용할 Dockerfile
    container_name: my-app # Spring Boot 컨테이너 이름
    ports:
      - "8080:8080" # 외부 포트 8080을 컨테이너 포트 8080에 연결
    networks:
      - my-network # 사용자 정의 네트워크에 연결
    depends_on:
      - database
    restart: always # Spring Boot가 중단되면 자동으로 재시작

networks:
  my-network: # 사용자 정의 네트워크 설정
    driver: bridge

volumes:
  mariadb-data: # 데이터 유지용 볼륨

3. JAR 파일 빌드

JAR 파일은 build/libs 경로에 빌드가 되어있는 상태라고 가정하고 진행.

4. Docker Compose 실행

CMD를 실행시키고 docker-compose.yml이 있는 경로로 이동한다.

docker-compose up --build -d를 통해서 docker-compose.yml에 정의해놓은 이미지를 기반으로 컨테이너를 실행시키는 등의 작업을 수행한다.

profile
Jihukimme

0개의 댓글