본문 바로가기
devOps

Spring 프로젝트 AWS EC2 Docker 배포

by WhoamixZerOne 2025. 2. 5.

Spring Boot 프로젝트를 AWS EC2에 Docker를 사용해서 배포를 해보려고 합니다.

프로젝트를 Docker build를 통해 Image로 만들고 Docker Hub에 공유해서 EC2에서 다운로드하고 프로젝트를 실행하는 방법입니다.

AWS EC2 구축 전이라면 아래의 링크를 참조해 주세요.
AWS EC2 구축 세팅(프리 티어)

현재 환경과 더 간편하게 배포하는 방법 및 EC2에 도커 설치 방법은 아래의 링크를 참조해 주세요.
Spring Boot 프로젝트 AWS EC2 배포하기

1. Gradle build

먼저 gradle build로 jar 파일을 만들어줍니다. 그전에 따로 설정 없이 빌드를 하면 "plain"이 없는 것과 있는 것 2개의 jar 파일이 생성되기 때문에 "*-plain.jar" 파일은 생성 안되도록 "build.gradle" 파일에 설정합니다.

  • build.gradle 파일 하단에 다음의 내용 작성
// build.gradle
jar {
    enabled = false
}

2. Dockerfile

Docker 이미지를 생성하려면 먼저 프로젝트 루트에 "Dockerfile"을 작성합니다.

Dockerfile의 이름은 대소문자를 구분합니다. 일반적으로 Dockerfile (첫 글자가 대문자)로 사용되며, 이름을 소문자로 (dockerfile) 작성하면 Docker가 이를 자동으로 인식하지 못할 수 있습니다. 따라서 Dockerfile로 이름을 지정하는 것이 표준이며, 권장됩니다. Dockerfile은 다음과 같습니다.

# 1. OpenJDK 17 이미지 사용
FROM openjdk:17-jdk-slim

# 2. 작업 디렉토리 설정
WORKDIR /app

# 3. JAR 파일을 Docker 이미지에 복사
ARG JAR_FILE=build/libs/*.jar
COPY ${JAR_FILE} app.jar

# 4. 애플리케이션 실행
ENTRYPOINT ["java", "-jar", "app.jar"]

# 5. 애플리케이션이 사용할 포트 설정
EXPOSE 8080

3. Docker Image build & Push

Dockerfile을 기반으로 이미지를 빌드하고 Docker Hub에 푸시해 보겠습니다. 그전에 도커에 계정이 없으신 분은 다음의 링크에서 회원 가입을 하고 진행하시기 바랍니다.

👉 도커 공식 사이트

 

그러면 이제 도커 이미지를 만들어 보겠습니다. 빌드 명령어는 다음과 같습니다.

  • docker build -t [dockerhub ID]/[이미지명]:[태그명] [Dockerfile 경로] (태그명 지정 안 하면 :latest로 지정)
docker build -t testxxboy/spring-petclinic .

정상적으로 완료가 됐으니 이미지가 생성됐는지 확인해 봅니다. 확인은 다음과 같습니다.

  • docker images
docker images

도커 이미지도 정상적으로 만들어졌으니 "docker push" 명령어로 docker hub에 올립니다.

docker hub에 올리기 전에 docker hub에 repository를 생성해줘야 합니다.

https://hub.docker.com

"도커 허브 Repositories"에서 "Create a repository"로 스프링 프로젝트를 도커 이미지로 만들어서 올릴 repository를 하나 생성합니다. 생성 시 repository명은 이미지 빌드를 했던 명칭과 일치해야 합니다. 앞서 도커 이미지를 "spring-petclinic" 명칭으로 이미지를 만들었기 때문에 repository 이름을 "spring-petclinic"으로 입력하고 "Create" 해줍니다.

 

docker hub에 올리려면 터미널에서 로그인도 해줘야 합니다. 다음 명령어로 로그인합니다.

docker login

"docker login"을 입력하면 이미지와 같이 나옵니다. "엔터(ENTER)" 누르면 브라우저가 열립니다.

http://docker.com

코드가 일치하면 "Confirm" 누르면 됩니다.

로그인 성공했다고 나왔습니다. 이제 다음 명령어를 통해 docker hub에 올려줍니다.

  • docker push [dockerhub ID]/[이미지명]:[태그명] (latest는 따로 태그명을 쓰지 않아도 됩니다)
docker push testxxboy/spring-petclinic

https://hub.docker.com/repositories

4. EC2 Docker 배포

EC2에 Docker 설치가 안되어 있는 분은 다음의 링크를 참조해서 Docker를 설치해 주세요.

👉 Spring Boot 프로젝트 AWS EC2 배포하기

 

EC2에서 docker hub에 올린 이미지를 다운로드합니다.

  • docker pull [dockerhub ID]/[이미지명]:[태그명] (latest는 따로 태그명을 쓰지 않아도 됩니다)
docker pull testxxboy/spring-petclinic

정상적으로 이미지가 다운로드된 것을 확인할 수 있습니다.

다운로드한 이미지를 컨테이너로 만들어 실행시키도록 하겠습니다.

  • docker run -d --name [컨테이너명] -p 8080:80808 [이미지명 or 이미지 ID] (이미지 ID는 겹치지 않는 값 일부만으로 인식 가능합니다)
docker run -d --name petclinic -p 8080:8080 44bc

컨테이너 실행이 잘 됐으니 애플리케이션 실행도 문제가 없는지 로그를 통해 확인해 보겠습니다.

  • docker logs -f petclinic
docker logs -f petclinic

로그 출력에도 애플리케이션이 문제없이 실행이 됐고 접속도 성공적으로 된 것을 볼 수 있습니다.

 

컨테이너를 실행시키고 로그를 확인했을 때 mysql 연결 오류가 있으신 분은 url을 "localhost"로 명시하면 연결이 안 됩니다. docker mysql IP로 변경해 보세요.

  • docker inspect [mysql 컨테이너명 or 컨테이너 ID]
docker inspect mysql8.4

가장 하단에 "NetworkSettings"에 "IPAddress"가 있습니다. 해당 IP를 mysql 연결 ip로 설정해 주세요.

 

 

 

🔗 Reference

'devOps' 카테고리의 다른 글

Spring Boot 프로젝트 AWS EC2 배포하기  (1) 2025.02.02
[Docker] Redis 설치  (0) 2023.06.28
Dockerfile & docker-compose 작성  (0) 2022.07.31
Docker 설치 및 명령어 정리  (0) 2022.07.24