[설치부터 응용까지] Java Spring Boot, Docker 활용해서 EC2에 배포하기
Docker를 활용해서 EC2에 간단하게 배포해보겠습니당!
Docker 활용하니까 진짜 편하더라구요..! 사전 준비물은 EC2 인스턴스와 spring boot 프로젝트 파일입니당~
순서
1. DockerHub 회원가입하기 & repository 만들기
2. 본인 노트북 (Mac)에 Docker 다운로드하기 & 로그인
3. EC2에 Docker 다운로드하기 & 로그인
4. Spring boot에 Docker 파일 생성
5. 본인 노트북에서 Gradle 빌드하고 Docker Image 만들어서 push 하기
6. EC2에서 Docker pull 받기
1. DockerHub 회원가입하기 & repository 만들기
docker hub 홈페이지 들어가서 회원가입 하고 repository 만들면 됩니다!
Username이랑 Repository 이름 나중에 써요~!
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
2. 본인 노트북 (Mac)에 Docker 다운로드하기 & 로그인
여기에서 도커 데스크탑 본인 노트북에 맞게 다운로드 받으시면 됩니다~!
https://www.docker.com/products/docker-desktop/
Docker Desktop: The #1 Containerization Tool for Developers | Docker
Docker Desktop is collaborative containerization software for developers. Get started and download Docker Desktop today on Mac, Windows, or Linux.
www.docker.com
터미널에서 도커 설치 확인 및 로그인하기
docker --version
# docker hub 계정 기준
docker login
3. EC2에 Docker 다운로드하기 & 로그인
1. 업데이트
sudo apt update
sudo apt-get update
sudo apt-get upgrade
2. https관련 패키지 설치
sudo apt install apt-transport-https ca-certificates curl software-properties-common
3. docker repository 접근을 위한 gpg 키 설정
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
4. docker repository 등록
sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu focal stable"
5. 다시 업데이트
sudo apt update
sudo apt-get update
sudo apt-get upgrade
7. 도커 설치
sudo apt install docker-ce
8. 설치 확인
docker --version
9. 도커 로그인
docker login
4. Spring boot에 Docker 파일 생성
1. gradlew 빌드하기
./gradlew build
2. 프로젝트 내부에 Dockerfile 만들기
빌드 후에 ./build/libs 안에 있는 jar파일을 바탕으로 docker 이미지를 만들겁니다.
도커 이미지 만드는 Dockerfile은 다음과 같이 작성합니다.
<설명>
1. java 17버전 사용
2. ./build/libs 폴더 안에 있는 gamegoo-0.0.1-SNAPSHOT.jar 파일 사용해서 이미지 빌드
3. JAR_FILE을 gamegoo.jar 파일에 복사
4. jar 파일 실행 명령 (여기서 -Dspring.profiles.active=prod 옵션은 application.yml을 개발 환경에서 따로 분리한 것)
FROM openjdk:17-alpine
ARG JAR_FILE=/build/libs/[본인 jar 파일]
COPY ${JAR_FILE} [본인이 원하는 이름]
ENTRYPOINT ["java","-jar","-Dspring.profiles.active=prod", "[COPY명령어에 썼던 이름]"]
5. 본인 노트북에서 Gradle 빌드하고 Docker Image 만들어서 push 하기
1. 도커 이미지용 gradle 빌드하기
./gradlew clean build -x test
2. 도커 이미지 빌드
이때, docker login할 때 사용했던 username과 명령어의 username이 다르면 에러 발생
sudo docker build --build-arg DEPENDENCY=build/dependency -t [본인 Docker Hub Username]/[Repository 이름] --platform linux/amd64 .
3. Docker에 push하기
sudo docker push -a [본인 Docker Hub Username]/[Repository 이름]
## 해당 단계 진행 중 발생했던 에러 ##
에러 메세지
해결 방법 1.
해결 방법 2.
build 옵션으로 -a 붙이기
sudo 붙이기
6. EC2에서 Docker pull 받기
백그라운드에서도 배포가 진행되도록 하고 싶으시면 -d 옵션 추가하세요!!!
sudo docker run -p 8080:8080 [본인 Docker Hub Username]/[Repository 이름]
참고 : https://9keyyyy.tistory.com/39
참고 2 : https://everydayyy.tistory.com/121