서비스 애플리케이션 이미지에 aws cli를 설치해야하는 요구사항이 발생

내가 만든 서비스는 Dockerfile을 이용해 이미지를 생성하지 않고,
gradle plugin인 bootBuildImage를 통해 이미지를 자동 build, push 하고 있었음.
aws cli를 추가하기 위해 Custom Image를 만들어야 함!

용어

OCI Images

  • Open Container Initiative Image
  • 표준 컨테이너 이미지 포맷
  • 도커 이미지와 호환되어 다양한 컨테이너 런타임에서 실행

Buildpacks

  • 애플리케이션을 빌드하고 배포하기 위해 필요한 코드를 자동으로 구성하는 툴

CNB

  • Cloud Native Buildpacks
  • CNCF(Cloud Native Computing Foundation)에서 주도하는 오픈소스 프로젝트
  • 소스 코드로부터 직접 컨테이너 이미지를 생성할 수 있는 툴
  • Dockerfile을 사용하지 않고 애플리케이션 모든 종속성과 런타임을 자동으로 포함하는 이미지 생성

bootBuildImage task

스프링 부트 프로젝트를 위한 CNB를 사용하여 OCI 이미지를 생성하는 Gradle task


적용

build.gradle

bootBuildImage {
    docker {
        builderRegistry {
            username = registryUserName
            password = registryPassword
            url = privateRegistryUrl
        }
        ... 기존 코드
    }
    pullPolicy = "IF_NOT_PRESENT"
    builder = "${privateRegistryUrl}/service-common-builder:builder"
    runImage = "${privateRegistryUrl}/service-common-builder:runner"
    ... 기존 코드
}
  • builder와 runImage는 optional이며 default 값이 존재

  • optional이라 지정해주지 않으면 bootBuildImage 실행 시
    docker hub에서 default builder, runner 이미지를 pulling 함.

  • custom image 를 사용할 것이기 때문에
    builder image와 runner image는 로컬에서 최초 1번 private ECR build and push후 공통으로 사용한다.

  • builderRegistry

    • private ECR 인증을 통해 builder image, runner image를 pull 할 수 있는 registry 정보
  • builder

    • 앱이 빌드되는 환경 이미지
    • paketobuildpacks/builder-jammy-base
    • spring document를 확인해보면 default value가
      paketobuildpacks/builder-jammy-base 이므로 해당 이미지를 ECR /service-common-builder:builder에 변경없이 push 함
  • runImage

    • 앱이 실행되는 환경 이미지

    • 해당 이미지를 base image로 해서 aws cli를 설치

    • paketobuildpacks/run-jammy-base

    • paketobuildpacks/builder-jammy-base 위의 builder의 builder.toml metadata에 작성된 run-image를 확인

    • Dockerfile

      • build 후 /service-common-builder:runner ECR에 배포
      FROM paketobuildpacks/run-jammy-base
      
       USER root
      
       RUN apt-get update && apt-get install -y \
           sudo \
           curl \
           unzip
      
       RUN curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip" \
           && unzip awscliv2.zip \
           && sudo ./aws/install
      
       User cnb
  • 위의 builder, runner image를 기반으로 생성된 서비스 애플리케이션 컨테이너에서 아래와 같이 확인

    cnb@d324d5752e24:/workspace$ aws --version
    aws-cli/2.17.24 Python/3.11.9 Linux/6.10.0-linuxkit exe/x86_64.ubuntu.22

Ref.

profile
얍얍 개발 펀치

0개의 댓글