컨테이너 빌드 시간 따져본 적 있나요? 몇 분 길어야 10분 정도 걸리는 일이 뭐가 대수일까? 이런 생각을 할 수도 있지만, 지속적 통합과 배포(CI/CD) 기반으로 마이크로서비스 아키텍처 환경을 꾸려 가려는 경우 생산성 향상을 위해 꼭 챙겨야 하는 요소입니다. 네, 컨테이너 빌드 시간을 줄이면 개발과 운영 생산성이 좋아진다는 것이죠. 참고로 스트라이프(Stripe)의 연구에 따르면 기업이 개발자 생산성 저하로 인해 낭비하는 비용이에 이른다고 합니다. 전체 CI/CD 파이프라인에서 몇 분 당긴다는 것을 대수롭지 않게 보면 안 되겠네요.
Cloud Build 들어보셨나요? 구글 클라우드 플랫폼이 제공하는 빌드, 테스트, 배포 서비스입니다. 이를 이용하면 어떤 언어로 개발을 하건 신속하게 빌드를 할 수 있습니다. VM 기반 가상화 환경, 서버리스 환경, 쿠버네티스, 파이어베이스 등 다양한 환경에서 빌드, 테스트, 배포 워크플로우를 적용하고 제어하는 목적으로 사용하기 딱 좋은 서비스입니다.
구글이 Cloud Build 환경에서 컨테이너 빌드 시간을 더 단축하기 위해 Kaniko 기반의 기능을 덧붙였습니다. 일종의 캐싱 기반으로 컨테이너 빌드를 하는 것인데요, 참고로 Kaniko는 Dockerfile에서 컨테이너 이미지를 빌드하는 데 사용하는 오픈 소스 기반 도구입니다. Kaniko 기반의 기능은 Cloud Build 릴리즈 버전 229.0.0 이상에서 사용할 수 있습니다.
간단히 경험을 해보시죠. 먼저 다음과 같이 실행해 봅니다.
$ gcloud config set builds/use_kaniko True
그리고 다음과 Dockerfile 내 디렉토리에 빌드를 제출합니다.
$ gcloud build submit --tag=gcr.io/[PROJECT_ID]/foo
참고로 Dockerfile을 캐싱에 최적화하는 방법은 관련 문서에 잘 나와 있습니다. 캐시는 저장소 단위로 범위를 지정하는데 기본 값은 6시간 동안 유지되는 것입니다.
$ gcloud config set builds/kaniko_cache_ttl <# of hours>
cloudbuild.yaml config에서 “docker build”대신 Kaniko를 사용하도록 편집해도 캐싱 기능을 이용한 빌드 속도 향상 효과를 누릴 수 있습니다.
steps: - name: gcr.io/kaniko-project/executor args: - --destination=gcr.io/$PROJECT_ID/foo - --cache=true - --cache-ttl=6h