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_ID、AWS_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"