Post

[Spring] Docker을 활용한 EC2 배포

Docker을 활용한 EC2 배포

배포 Flow

1
2
3
4
1. dockerfile을 작성한 후, 빌드하여 docker image를 생성.    
2. docker image 파일을 docker hub에 push.     
3. 서버(AWS EC2)에서 docker hub에 있는 docker image를 pull.    
4. docker run 명령어로 docker image를 실행.    

[1] Spring Boot 프로젝트 생성

[2] Dockerfile 생성

image

  • 아래와 같이 파일 내용을 작성한다
    image

[3] gradle build

  • Intellij 터미널에서 다음 명령어 실행
  • ./gradlew build -x test (-x test: 테스트 실행 X) 명령어를 통해서 build 실행 image

  • build > libs > jar 파일 생성된 것을 볼 수 있다
    image

[4] Docker Hub > 회원가입 > 로그인

Doker Hub 페이지

[5] Docker Hub Repository 생성

  • Repositories > Create repository
    image

  • Repository 이름 > Public 설정 > Create 를 클릭
    image

[6] Docker Image Build

  • Intellij 터미널에서 다음 명령어 실행
    1
    2
    
    # docker build --build-arg DEPENDENCY=build/dependency -t (도커 허브 ID)/(Repository 이름) .
    docker build --build-arg DEPENDENCY=build/dependency -t eunchaelyu/eroom .
    

트러블 슈팅 1

image

  • Docker Hub에 인증된 이미지로 명시하여 작성 (Dokerfile 아래와 같이 수정) image

  • 수정 후
    image

[7] Docker Image push

  • Intellij 터미널에서 다음 명령어 실행
  • docker push (도커 허브 ID)/(Repository 이름)
    image

  • 아까 생성한 Repositorydml Tag 부분을 통해 push가 잘 된 것을 확인
    image

[8] EC2에 Docker 설치 및 실행

  • AWS EC2 인스턴스가 있다고 가정하고 진행

    Ubuntu 환경명령어
    패키지 업데이트sudo apt-get update -y
    기존에 있던 도커 삭제sudo apt-get remove docker docker-engine docker.io -y
    도커 설치sudo apt-get install docker.io -y
    docker 서비스 실행sudo service docker start
    /var/run/docker.sock 파일의 권한을 666으로 변경하여 그룹 내 다른 사용자도 접근 가능하게 변경sudo chmod 666 /var/run/docker.sock
    eunchaelyu 유저를 docker 그룹에 추가sudo usermod -a -G docker eunchaelyu

[9] Docker image pull 및 애플리케이션 배포

1
sudo docker pull (도커 허브 ID)/(Repository 이름)    

image

1
sudo docker run -p 8080:8080 (도커 허브 ID)/(Repository 이름)       

트러블 슈팅 2

image

  • 1) 사용자 지정 Dockerfile을 생성하여 Java를 포함하여 필요한 종속성을 갖춘 이미지를 사용해야함
  • 2) 애플리케이션을 실행하는 데 필요한 실제 JAR 파일로 바꿔줘야 한다
1
2
3
4
5
6
7
8
9
10
11
12
# open jdk 17 버전의 환경을 구성
FROM openjdk:17-alpine

# build가 되는 시점에 JAR_FILE이라는 변수 명에 build/libs/Eroom-Project-BE-0.0.1-SNAPSHOT.jar 선언
# build/libs - gradle로 빌드했을 때 jar 파일이 생성되는 경로
ARG JAR_FILE=build/libs/Eroom-Project-BE-0.0.1-SNAPSHOT.jar

# JAR_FILE을 app.jar로 복사
COPY ${JAR_FILE} Eroom-Project-BE-0.0.1-SNAPSHOT.jar

# 운영 및 개발에서 사용되는 환경 설정을 분리
ENTRYPOINT ["java", "-jar", "-Dspring.profiles.active=prod", "/Eroom-Project-BE-0.0.1-SNAPSHOT.jar"]

Dokerfile 위와 같이 수정해서 적음 open jdk java17 버전의 환경 구성 build 되는 시점에 JAR_FILE 경로에 jar 파일 생성 JAR_FILE을 sejongmate.jar에 복사 jar 파일 실행 명령 (여기서 -Dspring.profiles.active=prod 옵션은 application.yml을 개발 환경에서 따로 분리한 것)

  • 최종 배포 완료 화면
    image
This post is licensed under CC BY 4.0 by the author.