SpringBoot를 도커 이용해서 EC2에 배포하기 (M1 사용)

YJMINT·2023년 8월 6일
1

◽️ 계기

이번 ICT 한이음 프로젝트에서 다시 백엔드 역할을 맡아 프로젝트를 진행해보기로 했다. 이때까지 능력 좋은 팀장님 그늘에만 있다가 자립해보고자 직접 도커를 이용해 EC2 환경에 배포해보기로 했고, 기록을 남기고자 한다. 새벽 5시까지 열강을 펼쳐준 팀장님께 감사를 표한다😘

◽️ 블로그를 통해 얻을 수 있는 점

  1. 도커의 간단한 개념, 동작원리, 사용 방법
  2. 도커를 이용한 EC2 배포 방법
  3. SpringBoot, docker, ec2 관계

◽️ 도커란?

도커에서 알아야 할 개념은 크게 3가지로, 도커 파일 - 도커 이미지 - 도커 컨테이너 이다. 간단히 설명하면 아래와 같다.

도커 파일 : 도커 이미지를 만들기 위한 설계도
도커 이미지 : 도커 컨테이너를 만들기 위한 설계도 (실행가능 파일 + 도커파일)
도커 컨테이너 : 어플리케이션을 패키징할 수 있게 해주는 컨테이너

◽️ 도커 동작 방식

스프링부트 소스코드 작성 -> 도커 파일 작성 -> 프로젝트 빌드 -> 도커 이미지 생성 -> 도커 허브 push -> ec2접속 -> 도커 이미지 pull -> 도커 컨테이너 생성 -> 스프링부트 프로젝트 배포 완료

  • 도커 파일과 실행가능 파일 (ex. jar)을 이용하여 build 과정을 통해 도커 이미지를 생성한다.
  • 로컬에서 생성한 도커 이미지를 도커 허브에 업로드 한다.
  • EC2 환경에 접속해 도커허브에서 미리 올려둔 도커 이미지를 다운받는다.
  • 다운받은 도커 이미지를 이용하여 도커 컨테이너를 생성하고 실행한다.
  • 배포 완료!

🟥 1. 도커 파일 생성

  • 프로젝트 내부에 Dockerfile을 생성한다. 이름은 반드시 'Dockerfile'로 지정해야한다.
FROM openjdk:8-jdk-alpine
ARGJAR_FILE=*.jar
COPY ${JAR_FILE} app. jar
ENTRYPOINT ["java", "-jar", "/app. jar"]

참고했던 도커파일 예시이다. 도커 파일에는 각 줄마다 의미하는게 다르다. 각자의 프로젝트 환경에 맞춰 설정해주면 된다. 도커 명령어 블로그 를 참고하며 작성해주면 수월하게 작성 가능하다.

FROM azul/zulu-openjdk:17
LABEL authors="jeong-yunju"
ARG JAR_FILE=build/libs/*.jar
COPY ${JAR_FILE} app.jar
ENTRYPOINT ["java","-jar","-Dspring.profiles.active=prod","-Djasypt_encryptor_password=${PW}","/app.jar"]

Dockerfile 해석

  • 프로젝트에서 사용하는 jdk : azul/zulu-openjdk:17
  • 도커파일 작성자 : jeong-yunju
  • 실행 가능 파일 (ex. jar) 위치 : build/libs/*.jar
  • 호스트 내부의 파일 또는 디렉토리를 컨테이너의 파일시스템으로 복사
  • 컨테이너 시작 시 prod yml 사용, 복호화 암호 PW 사용

🟧 2. 프로젝트 빌드

배포는 가장 최신 상태를 해두기 때문에, 프로젝트 빌드를 해줘 jar 파일을 최신 것으로 맞춰줘야 한다. 아래의 build 버튼을 눌러 빌드를 진행해준다. 만약 빌드가 제대로 안 된다면 프로젝트를 다시 확인해보자!

IntelliJ 우측의 코끼리 버튼 -> 프로젝트명 -> Tasks -> build -> build 

빌드를 성공하면 bulid/libs 에 jar 파일이 생긴다. 우리는 이 jar 파일과 Dockerfile을 이용하여 도커 이미지를 생성할 것이다.

🟨 3. 도커 이미지 생성

도커 이미지는 도커 컨테이너를 생성하기 위한 설계도이다. 도커 이미지를 만들기 위해선 실행 가능한 파일 (ex. jar) 과 Dockerfile이 필요하다.

도커 이미지 생성 전 준비사항

  • 도커 설치
  • 도커 허브 회원가입

( 1 ) 도커 실행

런치패드에서 미리 설치해둔 도커를 눌러 실행하면 상태바에 도커 이모콘과 도커 데스크탑이 뜬다. 오른쪽 사진처럼 뜨면 성공ㅎㅎ

( 2 ) 로컬에 docker image 생성

도커가 정상적으로 켜져있다면 도커 이미지를 빌드한다. 만약 Mac M1 사용자라면 --platform linux/amd64 .를 붙여줘야 정상적으로 docker image 생성이 가능하다.

docker build -t {도커이미지이름/태그} 
docker build -t jungyunju/nicefilmticket --platform linux/amd64 .

도커 이미지가 제대로 생성되었는지 확인한다. Docker Desktop으로도 확인할 수 있다.

docker images

🟩 4. 도커 허브에 이미지 Push

터미널에 명령어를 입력해 도커 이미지를 도커 허브에 push 한다. 마찬가지로 Docker Desktop으로 확인 할 수 있다.

docker push {도커이미지이름/태그} 
docker push jungyunju/nicefilmticket

🟦 5. EC2 접속, 도커 허브에서 도커 이미지 Pull

터미널에 다음과 같은 명령어를 쳐서 접속한다. public_ip는 AWS-EC2 인스턴스에서 확인할 수 있다.

ssh -i {pem키 경로} {username}@{public_ip}
ssh -i /Users/jeong-yunju/Project/example.pem ec2-user@1.11.11.11

도커허브에서 도커이미지 pull 받기

이 과정을 통해 EC2 환경에 내가 로컬에서 제작해둔 도커이미지를 그대로 가져올 수 있다.

docker pull {도커이미지이름/태그} 
docker pull jungyunju/nicefilmticket

🟪 6. 도커 컨테이너 생성

docker run 옵션 블로그를 보며 자신의 프로젝트에 맞는 옵션을 주며 도커 컨테이너를 생성하고 실행시킨다. 그러면 로컬에서 작업했던 환경과 동일하게 배포가 이뤄진다.

docker run -p {호스트포트:컨테이너포트} {이미지이름/태그}
docker run -d -p 8080:8080 --name spring -e PW={미리 지정해둔 암호} -e TZ=Asia/Seoul jungyunju/nicefilmticket:latest

도커 컨테이너가 제대로 동작하고 있는지 확인할 수도 있다.

docker ps

profile
YJMINT's develog

0개의 댓글

관련 채용 정보