이 연재글은 EKS(Elastic Kubernetes Service) 실습의 2번째 글입니다.

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툴을 적용하여 작업을 자동화하는 것을 추천합니다.

http://3.36.120.4/post/13700/service-mesh/
연재글 이동[이전글] EKS(Elastic Kubernetes Service) 작업환경 구성하기
[다음글] EKS Cluster에 Docker Image 배포하기