CI_CD

Kaniko 란? 빌드 방법

ipxy 2025. 3. 29. 16:34
728x90

 

🚀 Kaniko란

Docker 데몬 없이 컨테이너 이미지를 빌드하고, 레지스트리에 푸시할 수 있는 도구
즉, Kubernetes 환경에서 안전한 빌드 도구


✅ Kaniko 설치 방법 (Kubernetes 환경 기준)

Kaniko는 Go 프로그램 + 컨테이너 이미지 형태로 배포되며, 일반적으로 Pod로 실행하여 사용합니다. 설치보다는 "Kaniko를 이용한 빌드 작업 정의"가 핵심입니다.


📦 1. Kaniko 공식 이미지

gcr.io/kaniko-project/executor:latest

현재는 [gcr.io → gcr.io/kaniko-project → registry.k8s.io로 이전 중]이며, 최신 위치:

registry.k8s.io/kaniko-project/executor:latest

🛠️ 2. Kaniko를 사용하는 Kubernetes Job 예시

apiVersion: batch/v1
kind: Job
metadata:
  name: kaniko-build
spec:
  backoffLimit: 0
  template:
    spec:
      containers:
        - name: kaniko
          image: registry.k8s.io/kaniko-project/executor:latest
          args:
            - "--dockerfile=/workspace/Dockerfile"
            - "--context=dir:///workspace/"
            - "--destination=myregistry.example.com/my-app:latest"
            - "--insecure"              # HTTP 레지스트리 사용할 경우
            - "--skip-tls-verify"       # TLS 인증서 무시 (테스트용)
          volumeMounts:
            - name: kaniko-secret
              mountPath: /kaniko/.docker/
            - name: build-context
              mountPath: /workspace/
      restartPolicy: Never
      volumes:
        - name: kaniko-secret
          secret:
            secretName: regcred
        - name: build-context
          configMap:
            name: dockerfile-context

🔐 regcred는 Docker 레지스트리 인증 정보가 들어있는 Secret
📁 dockerfile-context는 Dockerfile과 소스 코드가 들어있는 ConfigMap (또는 PVC 등)


🔐 3. Docker 레지스트리 Secret 생성

kubectl create secret docker-registry regcred \
  --docker-server=myregistry.example.com \
  --docker-username=myuser \
  --docker-password=mypassword \
  --docker-email=my@example.com

🧪 4. 간단한 Dockerfile 예시 (ConfigMap으로 넣는 경우)

kubectl create configmap dockerfile-context \
  --from-file=Dockerfile=./Dockerfile \
  --from-file=app.py

✍️ GitLab CI에서 Kaniko 사용 예 (Docker-out-of-Docker 대체)

build-image:
  image: registry.k8s.io/kaniko-project/executor:latest
  script:
    - /kaniko/executor
      --dockerfile=Dockerfile
      --context=$CI_PROJECT_DIR
      --destination=$CI_REGISTRY_IMAGE:$CI_COMMIT_SHA
      --skip-tls-verify

✅ 요약

항목 내용

설치 형태 컨테이너 (Pod로 실행)
빌드 방식 Dockerfile 기준으로 이미지 빌드
Docker 필요 없음 O (완전 대체 가능)
사용 위치 GitLab, ArgoCD, Tekton, Kubernetes Job 등
인증 방식 Docker config.json 형태 Secret 사용

 

728x90