[ec2 문서화] 스프링부트 프로젝트 도커로 빌드하기 (근데 Ec2도 곁들인)

·

3 min read

스프링부트 애플리케이션을 EC2에 배포한 후, 도커 이미지로 빌드해보고자 합니다.

출처 : https://www.youtube.com/watch?v=XPtu0i3Mjag


1. 스프링부트 애플리케이션 생성

1) 스프링부트 프로젝트 기본 설정 (with. spring Initializer)

먼저 간단한 스프링부트 애플리케이션을 생성합니다.

스프링부트 생성은 Spring Initinalizer를 활용해줍니다.

인텔리제이 커뮤니티 버전에서도 아래와 같이 가능한지 모르겠는데... 혹시 안된다면 아래 링크에서 해주시면 됩니다!
https://start.spring.io/

저 같은 경우에는 hello_docker_ec2로 이름을 정했습니다.

폴더는 적당한 위치에 저장하고, Java, Gradle-Groovy로 설정했습니다.

자바 버전은 17이고 JDK는 19로 설정했습니다.

패키지는 Jar 파일로 설정했습니다. (war로 할 경우 웹 서버 톰캣이 포함 안 됩니다!)

스프링부트는 3.1.4버전으로 설정했고, 라이브러리 의존성 주입은 spring web만 넣었습니다.

내부에 비즈니스 로직을 구현하지 않을 계획이라 별다른 라이브러리는 안넣었습니다.

잘 실행되는 걸 확인할 수 있습니다.

2) Dockerfile 추가

다만 이후 도커를 사용할 예정이므로, 도커 이미지 생성을 위한 Dockerfile을 추가해줘야 합니다.

아래 그림에 보시면 root 위치에 file 타입으로 Dockerfile을 생성하는 것을 확인할 수 있습니다.

(다들 root에 Dockerfile을 생성하라고 하는데, root는 최상위 폴더를 뜻합니다)

Dockerfile을 위와 같이 작성(복붙) 해줍니다.

FROM openjdk:17-jdk-slim
ADD /build/libs/*.jar app.jar
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"]

그럼 스프링부트 애플리케이션 설정하는 부분은 끝났습니다.

2. Github Repository에 스프링부트 애플리케이션 코드를 Push

1) Github Repository 생성

Github로 들어가서 Repository를 하나 만들어 줍니다.

저는 hello-docker-ec2로 만들었습니다.

Create Repository하면 아래와 같이 화면이 나옵니다.

2) 인텔리제이에서 Git 설정 및 Commit 진행

다시 인텔리제이로 컴백해줍니다.

git Repository를 만들어줍니다.

파일들을 커밋해줍니다.

커밋메시지도 잊지 않고 작성해줍시다.

3) 인텔리제이에서 Push 진행

커밋했으니 push해야겠죠??

아까 깃허브에 만든 Repository에 push하기 위한 작업을 해줍시다.

Github repository에서 url을 복사해줍니다.

아래 그림에서 + 버튼을 누르면 그 아래 창이 뜹니다.

그러면 URL 에 아까만든(위 그림) github Repository의 url을 넣어줍니다.

https://github.com/HyemIin/hello-docker-ec2.git

사진에는 .git이 빠져있는데, 넣는게 맞습니다.

cmd+shift+k 를 눌러서 push를 해줍니다. (윈도우는 ctrl + shift + k)

Push하고 다시 깃허브 Repository 들어가보면 코드가 들어가 있는 것을 확인할 수 있습니다.

3. AWS EC2 인스턴스 생성 및 설정

aws ec2로 들어가줍니다.

이후 인스턴스를 생성해줍니다. 인스턴스 생성에 대해선 간략하게 작성하겠습니다.

인스턴스 이름 및 AMI 설정을 진행합니다.

AMI는 Ubuntu로 합니다.

인스턴스 유형은 t2.micro로 설정하고(프리티어라면 선택의 여지 없음..)

키페어는 하나 만들어줍니다.

스토리지 용량도 30GB까지 가능하나, 지금은 그게 중요한게 아니므로 기본값으로 놔둡니다.

인스턴스를 시작해줍니다.

보안 그룹으로 들어가 인바운드 규칙을 확인합니다.

포트 범위에 8080이 없다면 인바운드 규칙 편집을 통해 추가해줍니다.

4. 스프링부트 애플리케이션 빌드

터미널에 접속해줍니다.

위 EC2에서 생성한 서버로 접속합니다.

앞서 발급한 키페어 파일(xxx.pem)이 있는 폴더 내에서 접속을 시도해야합니다!

서버로 접속했다면 git clone + github repository url 을 통해 파일들을 클론해줍니다.

(아래 사진은 제가 제 local에 클론한 사진인데, 명령어는 같아서 그냥 씀...)

클론한 폴더로 들어와줍니다.

이제 빌드를 할껀데, 당연하지만 자바가 깔려있어야합니다. 서버를 새로 팠다면 당연히 없을 것이므로 자바가 안깔린 상태라면 자바 먼저 다운받으시길 바랍니다.

(java -version 쳤을 때 에러뜨면 다운받으셔야합니다.)

# java 다운
sudo apt update
sudo apt install openjdk-17-jdk

본론으로 돌아와서, git clone한 폴더 내에 gradlew라는 파일이 있는 것을 확인할 수 있습니다.

이후 sh gradlew를 입력해주면, gradle 설치가 진행됩니다.

gradle 설치가 완료됐다면, 이젠 빌드 할 일만 남았습니다.

sh gradlew build 를 입력하여 빌드를 진행해줍시다.

빌드 후 ll(엘엘)입력해서 파일 리스트를 보면, build라는 폴더가 새로 생긴 것을 확인할 수 있습니다.

cd/build/libs 로 들어가줍니다.

이후 java -jar hello_docker_ec2-0.0.1-SNAPSHOT.jar 명령어를 통해 터미널에서 스프링부트 서버를 띄워줍니다.

서버를 띄운 후 인스턴스 퍼블릭 IPv4 DNS : 8080 으로 접속하면 아래와 같이 스프링 애플리케이션이 서버에 배포된 것을 확인할 수 있습니다.

5. docker 생성

스프링부트 서버 종료하고 다시 git clone한 폴더 위치로 돌아옵니다.

돌아오고 난 후 docker build를 진행해줍니다.

docker build -t 폴더명 .
# 마지막에 폴더명 띄고, 점찍고,한번 더 띄고 엔터

이후 도커 컨테이너를 실행하면 완료입니다.


참고 자료

https://www.youtube.com/watch?v=XPtu0i3Mjag&list=LL&index=3&t=726s