Kaniko¶
はじめに¶
本サイトにつきまして、【IT技術の知見】はじめに - 俺の技術ノート をご認識のほど宜しくお願いいたします。
01. Kaniko とは¶
コンテナ内でコンテナイメージのビルドをエミュレートする。
これにより、Docker in Docker の問題を回避できる。
また、Kubernetes Cluster 内でコンテナイメージをビルドできるようになる。
レイヤー単位でコンテナイメージのキャッシュを作成できる。
そのため、都度、コンテナイメージをビルドしなくてよくなる。
2026/02/28 時点でサポートが停止しており、BuildKit などの代替ツールに移行したほうがよい。
02. セットアップ¶
Pod 上で実行する場合¶
▼ Amazon 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
GitHub Actions 上で実行する場合¶
▼ DockerHub¶
DockerHub の資格情報をエンコードして Actions secrets の DOCKERHUB_TOKEN に登録し、Repository variables の DOCKERHUB_IMAGE にイメージ名(例:example/kaniko)を設定する。
$ echo -n USER:PASSWORD | base64
*****
name: Build image for DockerHub
on:
push:
workflow_dispatch:
permissions:
contents: read
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Build and push with Kaniko
env:
DOCKERHUB_TOKEN: ${{ secrets.DOCKERHUB_TOKEN }}
DOCKERHUB_IMAGE: ${{ vars.DOCKERHUB_IMAGE }}
run: |
mkdir -p "$RUNNER_TEMP/kaniko-config"
printf '{"auths":{"https://index.docker.io/v1/":{"auth":"%s"}}}\n' \
"$DOCKERHUB_TOKEN" > "$RUNNER_TEMP/kaniko-config/config.json"
docker run --rm \
-v "$GITHUB_WORKSPACE:/workspace" \
-v "$RUNNER_TEMP/kaniko-config:/kaniko/.docker:ro" \
gcr.io/kaniko-project/executor:debug \
--context dir:///workspace \
--dockerfile /workspace/Dockerfile \
--destination "$DOCKERHUB_IMAGE:TAG"
▼ Amazon ECR¶
AWS の資格情報を Actions secrets の AWS_ACCESS_KEY_ID、AWS_SECRET_ACCESS_KEY に登録し、Repository variables の ECR_URL に既存のイメージリポジトリ URL を設定する。
name: Build image for Amazon ECR
on:
push:
workflow_dispatch:
permissions:
contents: read
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Build and push with Kaniko
env:
AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }}
AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
AWS_REGION: ap-northeast-1
ECR_URL: ${{ vars.ECR_URL }}
run: |
mkdir -p "$RUNNER_TEMP/kaniko-config"
printf '%s\n' '{"credsStore":"ecr-login"}' > "$RUNNER_TEMP/kaniko-config/config.json"
docker run --rm \
-e AWS_ACCESS_KEY_ID \
-e AWS_SECRET_ACCESS_KEY \
-e AWS_REGION \
-v "$GITHUB_WORKSPACE:/workspace" \
-v "$RUNNER_TEMP/kaniko-config:/kaniko/.docker:ro" \
gcr.io/kaniko-project/executor:debug \
--context dir:///workspace \
--dockerfile /workspace/Dockerfile \
--destination "$ECR_URL:TAG"
▼ Google Container Registry¶
サービスアカウントキーの JSON を Actions secrets の GCP_SERVICE_ACCOUNT_KEY に登録し、Repository variables の PROJECT_ID にプロジェクト ID を設定する。
name: Build image for Google Container Registry
on:
push:
workflow_dispatch:
permissions:
contents: read
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Build and push with Kaniko
env:
GCP_SERVICE_ACCOUNT_KEY: ${{ secrets.GCP_SERVICE_ACCOUNT_KEY }}
PROJECT_ID: ${{ vars.PROJECT_ID }}
run: |
printf '%s\n' "$GCP_SERVICE_ACCOUNT_KEY" > "$RUNNER_TEMP/gcloud-service-key.json"
docker run --rm \
-e GOOGLE_APPLICATION_CREDENTIALS=/kaniko/gcloud-service-key.json \
-v "$GITHUB_WORKSPACE:/workspace" \
-v "$RUNNER_TEMP/gcloud-service-key.json:/kaniko/gcloud-service-key.json:ro" \
gcr.io/kaniko-project/executor:debug \
--context dir:///workspace \
--dockerfile /workspace/Dockerfile \
--destination "asia.gcr.io/$PROJECT_ID/image_name:TAG"