コンテンツにスキップ

Kaniko

はじめに

本サイトにつきまして、以下をご認識のほど宜しくお願いいたします。


01. Kanikoとは

コンテナ内でコンテナイメージをビルドする。

これにより、Docker in Dockerの問題を回避できる。

また、Kubernetes Cluster内でコンテナイメージをビルドできるようになる。

レイヤー単位でコンテナイメージのキャッシュを作成できる。

そのため、都度、コンテナイメージをビルドしなくて良くなる。


02. Pod上で実行する場合

AWS ECR

apiVersion: v1
kind: Pod
metadata:
  name: kaniko
spec:
  containers:
    - name: kaniko
      image: gcr.io/kaniko-project/executor:latest
      args:
        - "--dockerfile=./docker/Dockerfile"
        - "--context=."
        - "--destination=****.dkr.ecr.ap-northeast-1.amazonaws.com/kaniko"
      volumeMounts:
        - name: aws-credentials
          value: /root/.aws/
  restartPolicy: Never
  volumes:
    - name: aws-credentials
      secret:
        secretName: aws-credentials


03. GitLab上で実行する場合

DockerHub

DockerHubの認証情報は、エンコードした上で、あらかじめGitLab CIの変数 (DOCKERHUB_TOKEN) に設定しておく。

$ echo -n USER:PASSWORD | base64

*****
stages:
  - build

build:
  stage: build
  image:
    name: gcr.io/kaniko-project/executor:debug
    entrypoint: [""]
  script:
    - echo '{\"auths\":{\"https://index.docker.io/v2/\":{\"auth\":\"${DOCKERHUB_TOKEN}\"}}}' > /kaniko/.docker/config.json
    - /kaniko/executor --context $CI_PROJECT_DIR --dockerfile $CI_PROJECT_DIR/Dockerfile --destination IMAGE_NAME:TAG


AWS ECR

AWSの認証情報は、あらかじめGitLab CIの変数 (AWS_ACCESS_KEY_IDAWS_SECRET_ACCESS_KEY) に設定しておく。

build:
  stage: build
  image:
    name: gcr.io/kaniko-project/executor:debug
    entrypoint: [""]
  variables:
    ECR_URL: ****.dkr.ecr.ap-northeast-1.amazonaws.com/kaniko
  script:
    - echo '{\"credsStore\":\"ecr-login\"}' > /kaniko/.docker/config.json
    - /kaniko/executor --context $CI_PROJECT_DIR --dockerfile $CI_PROJECT_DIR/Dockerfile --destination ${ECR_URL}:TAG


Google Container Registry

Google Cloudの認証情報ファイルは、あらかじめGitLab CIの変数 (GOOGLE_APPLICATION_CREDENTIALS) に設定しておく。

build:
  stage: build
  image:
    name: gcr.io/kaniko-project/executor:debug
    entrypoint: [""]
  variables:
    GOOGLE_APPLICATION_CREDENTIALS: /tmp/gcloud-service-key.json
  before_script:
    - mkdir /tmp
    - echo ${Google Cloud_TOKEN} > /tmp/gcloud-service-key.json
  script:
    - /kaniko/executor --context $CI_PROJECT_DIR --dockerfile $CI_PROJECT_DIR/Dockerfile --destination "asia.gcr.io/${PROJECT_ID}/image_name:TAG"