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"