Kaniko와 credStore 및 Multistage 활용

Description: Kaniko를 활용하여 Docker 없이 이미지 빌드하기 및 EKS 시크릿을 credStore를 통해 관리하며 편하게 사용한ㄴ 설정입니다. 추가적으로 빌드시 multi stage의 예시를 작성한 글입니다.

현재 노트: KR-020.10 b Kaniko와 credStore 및 Multistage 활용
상위 분류: KR-020.10 Docker

#Docker #Ops

Kaniko credStore

Kaniko라는 Docker없이 이미지를 빌드하는 데몬을 통해 eks관련 시크릿을 credStore를 통해 쉽게 관리합니다. 여기서 docker의 config.json 의 context값을 활용

image: alpine
stages:
  - build_and_push
build and push docker image:
  stage: build_and_push
  variables: 
    AWS_DEFAULT_REGION: ap-northeast-2
    CI_REGISTRY_IMAGE: 123456784321.dkr.ecr.ap-northeast-2.amazonaws.com/appname
  image:
    name: gcr.io/kaniko-project/executor:debug
    entrypoint: [""]
  script:
    -  mkdir -p /kaniko/.docker
    -  echo "{\"credsStore\":\"ecr-login\"}" > /kaniko/.docker/config.json
    -  /kaniko/executor
      --context "${CI_PROJECT_DIR}"
      --dockerfile "${CI_PROJECT_DIR}/Dockerfile"
      --destination "${CI_REGISTRY_IMAGE}:${CI_COMMIT_TAG}"

Multi stage build

최종 결과물만을 빌드 하는 방법. 중간과정에서 필요하지 않는 부분은 최종 이미지에 포하시키지 않아 최종 결과물의 용량을 줄입니다.

예를들면 아래에서 사용되는 이미지는 Node를 사용하기위한 330MB이지만, 실제 사용되는 이미지는 이전 스테이지의 결과물만 이용하기 때문에 최종적으로는 더 작은 이미지로 빌드됩니다.

# First Stage Approximately Node image has 330MB
FROM node:16 AS builder
WORKDIR /app
COPY . .
RUN npm install
RUN npm run build

# Second Stage Approximately Alpine image has 5MB
FROM nginx:alpine
COPY --from=builder /app/build /usr/share/nginx/html

# The final built image is 5MB + output of first Stage