Spring Boot + Docker + AWS EC2 배포하기

선형채·2023년 12월 5일
0
post-thumbnail

환경설정

인텔리제이, Spring Boot, Java 11, Gradle

사전 필요 작업

  • EC2에 Docker 설치

  • Local에 Docker 설치

  • Docker Image로 만들 Spring Boot 프로젝트.

과정

  • Dockerfile 을 build 해서 docker image 파일을 생성합니다.
  • docker image 파일을 dockerhub에 push 합니다.
  • 서버(AWS EC2)에서 dockerhub에 존재하는 docker image 파일을 pull로 받아옵니다.
  • docker run 명령어를 통해 docker image 파일을 실행합니다.

프로젝트에 docker 파일 추가

업로드중..

  • 프로젝트 폴더안에 (src 내부가 아님!!!) "Dockerfile" 이라는 파일을 생성하면, IntelliJ 기준 Docker File 로 인식한다.
# Docker file

FROM openjdk:11-jdk
ARG JAR_FILE=build/libs/*.jar
COPY ${JAR_FILE} app.jar
ENTRYPOINT ["java", "-Dspring.profiles.active=docker", "-jar", "/app.jar"]

도커파일에 위 내용 넣는다!(gradle 빌드후 jar파일)

dockerfile 요약

FROM openjdk:11-jdk

open jdk java11 버전의 환경을 구성합니다.
Amazon의 corretto 버전을 사용할 경우, 주석처리 한 부분으로 사용하면 됩니다.
ARG JAR_FILE=build/libs/*.jar

build가 되는 시점에 JAR_FILE 이라는 변수명에 build/libs/*.jar 표현식을 선언했다는 의미입니다.
build/libs 경로는 gradle로 빌드했을 때 jar 파일이 생성되는 경로입니다.
Maven의 경우 target/*.jar 로 설정해주시면 됩니다.
COPY ${JAR_FILE} app.jar

위에 선언한 JAR_FILE 을 app.jar 로 복사합니다.
ENTRYPOINT ["java","-jar","/app.jar"]

jar 파일을 실행하는 명령어(java -jar jar파일) 입니다.
ENTRYPOINT ["java","-jar","-Dspring.profiles.active=prod","/app.jar"]

운영 및 개발에서 사용되는 환경 설정을 분리해서 사용할 경우, 위와 같이 ENTRYPOINT를 설정할 수 있습니다.

gradle 빌드

업로드중..

./gradlew clean build

위 명령어를 통해 빌드하면 아래와 같이 build/libs 경로에 jar 파일이 생성됩니다.

업로드중..

Docker Image build

cmd창을 열고

docker build --build-arg DEPENDENCY=build/dependency -t 도커허브 ID/Repository --platform linux/amd64 .

※ 가장 마지막 점(.) 도 포함해야 합니다.
※ 경로는 꼭 프로젝트 경로에서 ! ! !

입력하게 되면

업로드중..

성공하게 되며,

Docker Image push

위에서 생성한 docker image 파일을 Docker Hub에 push를 해줍니다.

업로드중..

push 명령어는 docker hub의 Repository에 보면 확인할 수 있습니다.

업로드중..

latest ~~~뭐시 size: 나오면 성공한것으로

도커허브를 보면

업로드중..

tags가 생성된것 확인되면 된다 !

이제 서버(AWS EC2)에서 도커를 설치하고, 애플리케이션을 배포하면 끝입니다 !

profile
JAVA BACK-END DEVELOPER 👩‍💻

0개의 댓글