[기록]처음하는 배포 : (2) Docker를 사용해 EC2에 배포

MeanOfRedStone·2023년 11월 20일

일지

목록 보기
7/9
post-thumbnail

프로젝트 리뷰 외에 개발 일지를 기록해보려고 합니다.
러프하게 수행했던 작업을 기록해보겠습니다.


1. 들어가며


  이번에 사용하기로 한 배포 구조는 아래와 같습니다.

IntelliJ에서 GitHub로 push 하면 GitHub Actions에서 자동으로 애플리케이션의 CI와 CD를 진행합니다.

  오늘은 GitHub Actions에서 자동으로 코드를 빌드하고 배포하는 작업을 진행하기 앞서 제가 작성한 배포 구조에서 배포가 어떤 과정으로 이루어지는지 확인해보겠습니다. 1) 스프링부트에서 Gradle을 활용해 애플리케이션을 build하는 과정 2) Docker를 활용해 image를 생성 후 Docker Hub에 push 3)EC2에 ssh키를 활용해 접속해 Docker Hub에 있는 image run하는 과정으로 이루어졌습니다. 오늘 게시글은 해당 블로그 글을 참고해 작성했습니다.

2. 프로젝트 build


  먼저 스프링부트에서 생성한 프로젝트를 빌드하겠습니다. 프로젝트를 빌드한다는 것은 실제 사용할 수 있는 상태로 만드는 것을 뜻합니다. 터미널에 다음과 같은 코드를 입력하여 빌드하겠습니다.

./gradelw clean build -x test

gradle을 사용해 Test 없이 프로젝트를 빌드했습니다.

3. Docker


1) Docker File 생성

  스프링부트 프로젝트에 Dockerfile을 생성해줍니다.

File - New - File - Dockerfile

  다음으로 도커파일 내에서 java 버전, gradle을 통해 생성한 jar file 위치 등을 설정해줍니다. Gradle을 기준으로 작성한 것이니 Maven을 사용하신 분들은 참고 바랍니다.

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

여기서 손 볼 것은 자바 버전만 본인이 사용한 것 기준으로 설정해주시길 바랍니다.

(참고)
스프링 부트 2.5v 이후로는 build.gradle에 다음과 같은 설정을 추가해 주셔야 합니다.

jar {
	enabled = false
}

2) Docker Image 생성

  오늘 과정에 앞서 Docker Hub 회원가입과 설치가 선행되어야 합니다. Windows 사용자시라면 제가 지난 번에 작성한 글을 참고 바랍니다.

(1) Docker Hub 로그인

  먼저 IntelliJ 터미널에서 Docker Hub에 로그인 하겠습니다. 다음과 같은 코드를 입력해 주시길 바랍니다.

docker login -u [username]

이후 터미널에 빈 줄이 생성될텐데 비밀번호를 입력해주시면 로그인 됩니다.

(2) Docker Image 생성

  Docker File이 위에서 설정한 경로의 build 파일을 바탕으로 Docker Image를 생성해주는 작업입니다. 저는 태그 없이 이미지를 생성해보겠습니다.

docker build -t [username]/[이미지명] .

이미지 명은 임의로 설정해주시면 됩니다. 뒤에 '.'은 꼭 찍어주셔야 합니다. '.'은 현재 작업 디렉토리를 의미합니다.

(참고)
생성한 이미지를 확인하기 위해서

docker images

를 입력해 줍니다.

3) Docker Hub로 Image Push

  위에서 생성한 Docker Image를 Docker Hub로 push해주겠습니다. EC2서버에서 Docker Image를 호출해주기 위해서입니다.

docker push [username]/[image 파일명]

(참고)
Docker Desktop에 들어가시면 계정으로 푸쉬된 이미지를 확인할 수 있습니다.

4. EC2에서 Docker Image 배포

  오늘 글의 마지막 부분입니다. 이제 EC2 상에서 Docker Hub에 존해하는 Docker Image를 배포하겠습니다. EC2 구축EC2 내에 Docker 설치는 해당 글을 참고해 주시길 바랍니다.

1) EC2 접속

  계속해서 Windows 사용자 분들을 기준으로 설명 드립니다. EC2 구축 글을 참고하여 ssh접속을 진행하겠습니다. 이후 도커 허브에 로그인 하겠습니다.

EC2 서버에 접속한 후 IntelliJ에서와 마찬가지로 Docker Hub에 로그인 해줍니다.

docker login -u [username]

해당 코드를 입력해주겠습니다.

2) Docker Image Pull

  Docker Hub에 존재하는 Image를 pull해보겠습니다. 계속해서 터미널에서 아래와 같은 코드를 입력해줍니다.

docker pull meanofredstone/portfolio

3) Docker Image 컨테이너화

  먼저 컨테이너의 의미는 다음과 같습니다. 삼성SDS 블로그 글에 따르면 컨테이너는 앱이 구동되는 환경까지 감싸서 실행할 수 있는 격리 기술을 뜻합니다. 깊은 이론적인 내용은 다루질 못하니 실제로 서버상에서 가동되는 Docker Image로 생각하겠습니다. Docker Hub에서 EC2 서버로 불러온 이미지를 구동하기 위해 다음과 같은 코드를 입력해 줍니다.

docker run -it -d -p 8080:8080 --name [컨테이너명] [username]/[이미지명]

이후 해당과 같은 코드를 입력해 주어 컨테이널가 구동 중인지 확인해 줍니다.

docker ps

이후 EC2에 할당받은 IP 주소로 들어가보셔서 최종적으로 확인해 주시면 됩니다.

5. 마치며

오늘은 수동으로 SpringBoot, EC2, Docker를 사용해 배포를 해봤습니다. 다음 번에는 CI/CD를 활용해 자동으로 배포가 진행되도록 해보겠습니다. CI/CD는 오늘 한 코드를 그대로 입력해주는 것이라고 생각하시면 됩니다. CI/CD 과정에서 한참을 헤매다 이렇게 수동으로 배포를 해보니 과정이 이해가 잘 돼서 수동 배포 과정을 추가해봤습니다.

profile
기록 공간

0개의 댓글