Amazon Web Services 한국 블로그

AWS CodeBuild Docker Server 정식 출시 – CI/CD 파이프라인 가속화

오늘부터 AWS CodeBuild의 Docker Server 기능을 사용하여, CodeBuild 프로젝트 내에서 전용의 지속적인 Docker Server를 직접 프로비저닝할 수 있습니다. Docker Server 기능을 사용하면 이미지 빌드를 원격 호스트에서 중앙집중식으로 처리할 수 있어, 대기 시간이 줄어들고 전체적인 효율성이 향상되어 Docker 이미지 빌드 속도를 높일 수 있습니다.

벤치마크 결과, 이 Docker Server 기능을 통해 전체 빌드 시간을 98% 단축하여 24분 54초에서 16초로 줄일 수 있었습니다. 다음은 AWS CodeBuild 프로젝트에서 이 기능을 간단히 살펴본 내용입니다.

AWS CodeBuild는 소스 코드를 컴파일하고, 테스트를 수행하고, 바로 배포 가능한 소프트웨어 패키지를 생성하는 완전관리형의 연속적 통합 서비스입니다. Docker 이미지를 빌드하는 것은 CodeBuild 고객들이 가장 많이 사용하는 사례 중 하나이며, CodeBuild는 Docker 레이어 캐싱예약 용량 기능과 같은 기능들을 출시하여 Docker 빌드 성능을 향상시키는 등 이 경험을 지속적으로 개선해왔습니다.

새로운 Docker Server 기능을 사용하면, 일관된 캐싱이 제공되는 지속적인 Docker Server를 통해 애플리케이션의 빌드 시간을 줄일 수 있습니다. CodeBuild 프로젝트에서 이 기능을 활성화하면, Docker 레이어 캐시를 유지하는 영구 스토리지가 탑재된 전용 Docker Server가 프로비저닝됩니다. 이 서버는 여러 개의 동시 Docker 빌드 작업을 처리할 수 있으며, 모든 빌드가 동일한 중앙 캐시의 이점을 누릴 수 있습니다.

AWS CodeBuild Docker Server 사용하기
새로운 Docker Server 기능의 이점을 보여주는 데모를 안내해드리겠습니다.

이번 데모에서는 공식 AWS CodeBuild에서 관리하는 Docker 이미지 리포지토리의 Dockerfile을 활용하여, 표준 Ubuntu 이미지를 빌드하는 복잡하고 다층적인 Docker 이미지를 만들고 있습니다. 이 이미지는 현대적인 지속적 통합 및 지속적 배포(CI/CD) 파이프라인에 필요한 수많은 종속성과 도구들을 포함하고 있어, 개발팀이 정기적으로 수행하는 대규모 Docker 빌드 유형의 좋은 예입니다.


# Copyright 2020-2024 Amazon.com, Inc. or its affiliates. All Rights Reserved.
#
# Amazon Software License(이하 "라이선스")에 따라 라이선스가 부여됩니다. 라이선스를 준수하지 않는 한 이 파일을 사용할 수 없습니다.
라이선스 사본은 다음 위치에 있습니다.
#
#    http://aws.amazon.com/asl/
#
# 또는 이 파일과 함께 제공되는 "license" 파일에 있습니다.
# 이 파일은 명시적이거나 묵시적인 어떠한 보증이나 조건 없이 "있는 그대로(AS IS)" 배포됩니다.
# 라이선스에 따른 권한 및 제한 사항에 대한 구체적인 내용은 라이선스를 참조하시기 바랍니다.
FROM public.ecr.aws/ubuntu/ubuntu:20.04 AS core

ARG DEBIAN_FRONTEND="noninteractive"

# git, SSH, Git, Firefox, GeckoDriver, Chrome, ChromeDriver, stunnel, AWS 도구, SSM 구성, AWS CLI v2, 그리고 런타임용 환경 도구들(Dotnet, NodeJS, Ruby, Python, PHP, Java, Go, .NET, Powershell Core, Docker, Composer 및 기타 유틸리티) 설치
COMMAND REDACTED FOR BREVITY
# 이미지 버전에 따라 특정 런타임 버전을 활성화
RUN n $NODE_14_VERSION
RUN pyenv  global $PYTHON_39_VERSION
RUN phpenv global $PHP_80_VERSION
RUN rbenv  global $RUBY_27_VERSION
RUN goenv global  $GOLANG_15_VERSION

# SSH 구성
COPY ssh_config /root/.ssh/config
COPY runtimes.yml /codebuild/image/config/runtimes.yml
COPY dockerd-entrypoint.sh /usr/local/bin/dockerd-entrypoint.sh
COPY legal/bill_of_material.txt /usr/share/doc/bill_of_material.txt
COPY amazon-ssm-agent.json /etc/amazon/ssm/amazon-ssm-agent.json

ENTRYPOINT ["/usr/local/bin/dockerd-entrypoint.sh"]

이 Dockerfile은 여러 프로그래밍 언어, 빌드 도구, 그리고 다양한 종속성을 포함한 포괄적인 빌드 환경을 생성합니다. 이러한 유형의 이미지는 지속적인 캐싱의 이점을 극대화할 수 있습니다.

빌드 사양(buildspec)에서는 docker buildx build . 명령어를 사용합니다.

version: 0.2
phases:
  build:
    commands:
      - cd ubuntu/standard/5.0
      - docker buildx build -t codebuild-ubuntu:latest .

Docker Server 기능을 활성화하려면, AWS CodeBuild 콘솔로 이동하여 프로젝트 생성을 선택합니다 기존 CodeBuild 프로젝트를 편집할 때도 이 기능을 활성화할 수 있습니다.

모든 세부 사항과 구성을 입력합니다. 환경 섹션에서 추가 구성을 선택합니다.

그런 다음, 아래로 스크롤하여 Docker Server 구성을 찾고, 이 프로젝트에 대해 Docker Server 활성화를 선택합니다. 이 옵션을 선택하면 Docker Server의 컴퓨팅 유형 구성을 선택할 수 있습니다. 구성이 끝나면 이 프로젝트를 생성합니다.

이제 Docker Server 기능이 실제로 어떻게 동작하는지 살펴보겠습니다.

초기 빌드는 모든 종속성을 처음부터 다운로드하고 컴파일해야 하기 때문에 약 24분 54초가 소요됩니다. 이처럼 복잡한 이미지를 처음 빌드할 때는 이러한 현상이 예상됩니다.

코드 변경이 없는 이후 빌드에서는 빌드 시간이 단 16초로 줄어들어, 빌드 시간이 98% 감소한 것을 확인할 수 있습니다.

로그를 확인해보면, Docker Server를 사용할 때 대부분의 레이어가 영구 캐시에서 불러와지는 것을 볼 수 있습니다.

Docker Server가 제공하는 영구 캐싱은 빌드 간에 모든 레이어를 유지하므로, 많은 레이어를 가진 크고 복잡한 Docker 이미지에 특히 가치가 있습니다. 이는 Docker Server가 CI/CD 파이프라인에서 수많은 Docker 빌드를 실행하는 팀의 처리량을 획기적으로 향상시킬 수 있음을 보여줍니다.

추가 정보
몇 가지 주요 사항을 알려드립니다.

  • 아키텍처 지원 – 이 기능은 x86(Linux)과 ARM 빌드 모두에서 사용할 수 있습니다.
  • 요금 – Docker Server 기능의 요금에 대해 자세히 알아보려면 AWS CodeBuild 요금 페이지를 참조하세요.
  • 가용성 – 이 기능은 AWS CodeBuild가 제공되는 모든 AWS 리전에서 사용할 수 있습니다. CodeBuild를 사용할 수 있는 AWS 리전에 대한 자세한 내용은 AWS 리전 페이지를 참조하세요.

Docker Server 기능에 대해 더 자세히 알아보려면 AWS CodeBuild 설명서를 참조하세요.

즐거운 빌드하세요!

Donnie Prakoso


뉴스 블로그를 어떻게 생각하시나요? 이 1분짜리 설문조사에 참여해 주세요!

(이 설문조사는 외부 기업에서 호스트합니다. AWS는 AWS 개인정보 처리방침에 설명한 대로 사용자 정보를 처리합니다. AWS는 이 설문 조사를 통해 수집된 데이터를 소유하며 수집된 정보를 설문 응답자와 공유하지 않습니다)