본문 바로가기
DevOps

[Docker] Java17 + Spring Boot + Docker + AWS EC2에 배포하기

by asdft 2024. 4. 14.

스프링부트 프로젝트를 도커를 통해서 EC2에 배포하고자 한다

과정을 살펴보면 아래와 같다.

 

1. 로컬에서 스프링부트 프로젝트를 빌드하여 review-0.0.1-SNAPSHOT.jar 파일 생성

2. 위의 빌드한 파일을 도커 이미지로 만든 후 Docker Hub Repository에 push

3. EC2에서 Docker Hub Repository를 통해 이미지 pull

4. 배포 완료

 

 

📍 1. Dockerfile 생성하기

FROM openjdk:17

# JAR_FILE 변수 정의 -> 기본적으로 jar file이 2개이기 때문에 이름을 특정해야함
ARG JAR_FILE=./build/libs/review-0.0.1-SNAPSHOT.jar

# JAR 파일 메인 디렉토리에 복사
COPY ${JAR_FILE} app.jar

#시스템 진입점 정의
ENTRYPOINT ["java","-jar","/app.jar"]

 

 

📍 2. Gradle - clean - build 를 통해서 SHAPSHOT.jar 파일 생성

 

📍 3. 로컬 컴퓨터와 EC2에 각각 도커 설치

아래는 윈도우와 우분투에서 도커를 설치하는 방법 안내이다.

https://radiant515.tistory.com/315

 

[Docker] 윈도우11 Docker 설치(WSL2 설치 포함)

❗Docker 설치 https://www.docker.com/ Docker: Accelerated, Containerized Application Development Docker is a platform designed to help developers build, share, and run modern applications. We handle the tedious setup, so you can focus on the code. www.d

radiant515.tistory.com

https://radiant515.tistory.com/318

 

[Docker] 우분투 18.04 Docker 설치하기

❗Docker 오래된 버전 삭제하기 이전에 깔았던 Docker가 있다면 삭제 후 새로운 버전을 깔기 위해 명령어를 실행한다 sudo apt-get remove docker docker-engine docker.io containerd runc ❗Docker 설치 sudo apt update sudo

radiant515.tistory.com

 

📍 4. Docker Hub

Docker Hub를 통해 이미지를 push하고 pull할 것이기 때문에 먼저 회원가입 후 로그인을 수행한다.

https://hub.docker.com/

 

Docker Hub Container Image Library | App Containerization

Increase your reach and adoption on Docker Hub With a Docker Verified Publisher subscription, you'll increase trust, boost discoverability, get exclusive data insights, and much more.

hub.docker.com

 

접속 후,

Repository - Create Repository - Repository Name 입력 - Visibility : public 설정 - Create 

하면 아래와 같이 Repository 공간이 생긴 것을 확인할 수 있다.

 

📍 5. Docker Image 생성

프로젝트를 빌드한 것을 도커 이미지로 만들기 위한 과정이다.

아래의 과정은 Spring Boot 프로젝트 루트경로의 Terminal 창에서 실행해야 한다.

주의 ! ) 입력 후 한칸뛰고 . 점 찍기!! 
# docker build -t [도커아이디/도커리포지토리이름] .
docker build -t luciano97/review .

docker images로 이미지가 만들어진 것을 확인 할 수 있다.

 

📍 6. Docker Hub에 login 하기 

명령어 입력 후 Docker Hub 가입할 때 쓴 ID/PW를 입력해준다.

docker login

 

📍 6. Docker Hub에 이미지 Push 하기 

# docker push [도커아이디/도커리포지토리이름]
docker push luciano97/review

 

 

📍 7. EC2에서 Image Pull 하기

EC2 ip 콘솔에 접속한 후 아래 명령어를 실행한다.

# docker pull [도커아이디/도커리포지토리이름]
docker pull luciano97/review

 

docker의 Image를 가져올때는 관리자 권한으로 수행해야 성공적으로 수행할 수 있다.
나의 경우 직접 EC2 인스턴스에 접속했다.
아래와 같은 로그가 나올 경우 성공적으로 Docker Hub -> EC2로 이미지를 당겨온 것이다.
ubuntu@ip-172-31-32-102:~$ docker pull luciano97/review
Using default tag: latest
permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock: Post "http://%2Fvar%2Frun%2Fdocker.sock/v1.45/images/create?fromImage=luciano97%2Freview&tag=latest": dial unix /var/run/docker.sock: connect: permission denied
ubuntu@ip-172-31-32-102:~$ sudo su -
root@ip-172-31-32-102:~# docker pull luciano97/review
Using default tag: latest
latest: Pulling from luciano97/review
38a980f2cc8a: Pull complete 
de849f1cfbe6: Pull complete 
a7203ca35e75: Pull complete 
2a8b3bda5703: Pull complete 
Digest: sha256:97f9be1d7b1d17959c8198f83dd7efbfb5167f3700723821a9a978b924e3a33e
Status: Downloaded newer image for luciano97/review:latest
docker.io/luciano97/review:latest

 

📍 8. host port와 container port를 연결하기 위해 포트가 2개 적혀있다.

# docker run -d -p 8080:8080 [도커 아이디/도커 리포지토리 이름]
docker run -d -p 8080:8080 luciano97/review
docker run -d -p 8080:8080 luciano97/review
03649f7b64f525d0be67ccc3f382e8b53a61e855509c4644a4504029a19118f0

 위와 같이 성공적으로 배포된 것을 볼 수 있다.

 

나의 경우 탄력적 IP주소를 설정해 주었다.

# 탄력적IP주소:포트번호/URL맵핑주소
http://52.78.167.249:8080/hello/world

 

배포 성공!!!

 

[느낀 점]

위와 같이 배포는 성공 했지만 수정된 내용이 있을 때마다, 다시 파일을 재배포 해야 하는 번거로움이 있다.

그래서 다음에는 GitHub에 올리기만 하면 자동으로 통합/관리/배포 해줄 수 있는 CI/CD를 구축해 봐야겠다.