Spring boot 앱을 ECS Fargate로 서비스하려면 Docker Image로 만들어야 하고, 이렇게 Image로 만드는 것을 Dockerize한다고 한다.
# 기본 이미지 설정
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"]
build.gradle
파일에 아래와 같이 dependency를 추가해준다.dependencies {
...
implementation 'org.springframework.boot:spring-boot-starter-actuator'
...
}
./gradlew clean build
-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/