Spring Boot app 도커라이즈(dockerize) & Docker Image 생성

ohyujeong·2023년 9월 14일
1

Spring boot 앱을 ECS Fargate로 서비스하려면 Docker Image로 만들어야 하고, 이렇게 Image로 만드는 것을 Dockerize한다고 한다.

  1. Dockerfile 생성
    Spring boot 앱을 Dockerize하려면 Dockerfile이라는 명칭을 가진 파일을 생성해야한다.
    프로젝트의 root 디렉토리에 Dockerfile 파일을 생성하고, 아래와 같이 작성한다.
# 기본 이미지 설정
FROM openjdk:17

# 이 Dockerfile 내부에서만 사용될 변수 설정
ARG JAR_FILE=build/libs/*.jar

# JAR_FILE 변수를 사용하여 컨테이너에 'app.jar' 의 이름으로 파일 복사
COPY ${JAR_FILE} app.jar

# 8000 포트 노출 (default 8080이지만 나의 프로젝트 포트를 8000으로 설정했기 때문에 변경해줌)
EXPOSE 8000

# 컨테이너가 시작될 때 실행되는 명령어 지정 (스크립트 파일 지정도 가능)
ENTRYPOINT ["java", "-jar", "/app.jar"]
  1. Actuator 추가
    Actuator는 spring boot가 자체적으로 제공하는 기능으로, HTTP나 JMX를 이용해서 app을 모니터링하고 관리할 수 있도록 해준다. 이렇게 함으로써 추후 ECS에서 서비스를 생성할 때 health check를 할 수 있다.
    build.gradle 파일에 아래와 같이 dependency를 추가해준다.
dependencies {
	...
	implementation 'org.springframework.boot:spring-boot-starter-actuator'
	...
}
  1. build 폴더 만들기
    spring boot 앱의 root 경로에서 아래 명령어를 입력하여 빌드한다. 빌드가 성공하면 build 폴더가 생성된다.
./gradlew clean build
  1. Docker image 빌드
    아래 명령어를 입력하여 Docker image를 빌드한다. -t 옵션으로 image의 tag를 설정해준다. 맨 마지막에 . 은 현재 위치에 있는 Dockerfile을 사용한다는 의미이다.
docker build -t your-app-name:app-version .

나의 토이 프로젝트에서는 version은 편의상 latest를 사용했었다.

이제 docker image 생성을 위한 준비는 완료되었고, Dockerhub나 AWS의 ECR에 생성한 image를 push하면 된다. 먼저 Dockerhub에 image를 push하는 방법을 살펴보자.

5-1. Dockerhub에 image push
먼저 터미널에서 dockerhub에 접근하는 것이기 때문에 아래 명령어로 docker login을 해준다.

docker login

아이디 패스워드를 제대로 입력하고 로그인이 성공했다면, 아래 명령어로 image를 push한다.

docker push your-dockerhub-repository-name/your-app-name:app-version

5-2. ECR에 image push
ECR을 사용하려면 먼저 Repository를 생성해주어야 한다.
image 이름의 convention은 your-dockerhub-repository-name/your-app-name:app-version 인데, 여기서 your-app-name 에 해당하는 부분의 명칭을 입력하여 repository를 생성한다.

생성 후 해당 repository를 들어가면 View pull commands 버튼이 있고, 누르면 명령어가 나열되어있다. 순서대로 터미널에 입력하여 image를 push한다.

참고
https://javatodev.com/using-amazon-ecr-for-publishing-docker-images/
https://javatodev.com/how-to-dockerize-spring-boot-application/

profile
거친 돌이 다듬어져 조각이 되듯

0개의 댓글