9oormthonUNIV 스터디 프로젝트

Spring Boot 프로젝트를 AWS EC2에 Docker로 배포하기

연향동큰손 2025. 4. 30. 15:44

 

1. 스프링 부트 프로젝트에 Dockerfile 생성

 

FROM openjdk:21-jdk-slim

# JAR 파일 이름을 인자로 받음
ARG JAR_FILE=build/libs/OAuth2_9oormthonUNIV-0.0.1-SNAPSHOT.jar

# 컨테이너 내부에 app.jar로 복사
COPY ${JAR_FILE} app.jar

# 8080 포트 개방
EXPOSE 8080

# Spring Boot 실행
ENTRYPOINT ["java", "-jar", "app.jar"]

 

Dockerfile을 통해 Spring Boot 애플리케이션을 실행할 수 있는 Docker 이미지를 생성한다.

🎯 이미지는 컨테이너를 실행하기 위한 실행 환경과 애플리케이션 코드, 필요한 설정, 의존성, 라이브러리 등을 모두 포함한 "설계도" 라고 보면 된다.

 

 

2. 스프링 부트 프로젝트에 docker-compose.yml 생성

services:
  mysql-db:
    image: mysql:8.0
    container_name: mysql-db
    restart: always
    environment:
      MYSQL_ROOT_PASSWORD: 
      MYSQL_DATABASE: 
    ports:
      - "3306:3306"
    networks:
      - spring-net
    healthcheck:
      test: ["CMD", "mysqladmin", "ping", "-h", "localhost"]
      interval: 10s
      timeout: 5s
      retries: 5

  spring-app:
    build: .
    container_name: spring-app
    ports:
      - "8080:8080"
    depends_on:
      mysql-db:
        condition: service_healthy  
    networks:
      - spring-net

networks:
  spring-net:

docker-compose.yml은 여러 컨테이너를 한 번에 구성하고 실행하도록 해준다.

 

이 프로젝트에서는 spring프로젝트와 MySQL이 필요하므로 실행할 컨테이너들을 mysql-db, spring-app로 정의하고, Dockerfile로 이미지를 생성한 후 

 

networks:
  spring-net:

 

위 코드를 통해 두 컨테이너가 같은 네트워크 안에서 통신하도록 해준다.

 

 

3. Ec2 인스턴스 생성

컨테이너를 Ec2 인스턴스에서 생성하고 실행하기 위해서 Ec2 인스턴스를 생성 해야 한다.

 

 

4. 배포 준비

 

자바 설치

sudo apt install -y openjdk-21-jdk

 

 

Docker 및 Docker Compose 설치

sudo apt update
sudo apt install -y docker.io docker-compose
sudo systemctl start docker
sudo systemctl enable docker

 

 

깃허브 리포지 토리에서 프로젝트 클론

sudo apt install git
git clone https://github.com/your/repo.git

 

 

프로젝트 파일로 이동 후 Spring Boot 프로젝트 빌드

./gradlew build -x test

 

 

Docker Compose로 컨테이너 실행

sudo docker-compose up --build -d

-d: 백그라운드 실행
--build: 코드가 수정되었을 경우 새로 빌드

 

sudo docker ps를 통해 컨테이너가 잘 작동하는지 확인할 수 있다.

 

 

 

배포 성공!