Kubernetes Cluster에 docker image를 배포하기 위해서는 docker image를 저장할 원격 저장소(registry)가 필요합니다. AWS에서는 이러한 Private Registry를 쉽게 구축할 수 있는 ECR(Elastic Container Registry)서비스를 제공하고 있습니다.
ECR Repository 생성
Create Repository
- Repository name을 입력 후 Create repository 클릭하여 저장소를 생성합니다.
- 생성된 Repository의 URI를 복사해 놓습니다.
SpringBoot Docker Image ECR에 배포하기
Spring 프로젝트에서 jib을 이용하면 쉽게 Docker 이미지를 생성하고 Registry에 배포할 수 있습니다.
https://github.com/GoogleContainerTools/jib
build.gradle에 jib관련 내용 추가
plugins { // 생략 id 'com.google.cloud.tools.jib' version '1.8.0' } // 생략 jib { from { image = "openjdk:8-alpine" } to { image = "ECR Repository URI" tags = '0.0.1-SNAPSHOT' } container { // Set JVM options. jvmFlags = ['-Dspring.profiles.active=dev', '-XX:+UseContainerSupport', '-Dserver.port=8080', '-Dfile.encoding=UTF-8'] // Expose different port. ports = ['8080'] } }
ECR로 배포시엔 작업 환경에 aws configure를 통해 iam credential이 세팅되어 있어야 합니다.
세팅되어 있는 상태에서 아래와 같이 gradle task를 실행하면 project를 build한 후에 docker image를 생성하여 ECR에 배포하게 됩니다.
$ ./gradlew jib
만약 credential이 default가 아닐경우 다음과 같이 profile을 직접 지정하여 실행도 가능합니다.
$ AWS_PROFILE=프로필명 ./gradlew jib
Docker 이미지 업로드 확인
실습을 통해 간략하게 Springboot Docker 이미지를 원격 Registry에 업로드하는 방법을 진행해보았습니다. 실제 서비스 환경에서는 로컬에서 직접 docker 이미지를 올리기보다는 Jenkins 같은 CI툴을 적용하여 작업을 자동화하는 것을 추천합니다.