🦔
サブディレクトリにあるDockerfileをCloud Build + kanikoでビルドする際の注意
Cloud Build で kaniko を使用すると、うまくキャッシュを利用して Docker イメージのビルドを高速化できます。[1]
kaniko を使用しない場合、以下のように dir
でディレクトリを指定すれば、dir
で指定したディレクトリをワークスペースとして docker build
が実行されます。
steps:
- name: "gcr.io/cloud-builders/docker"
args:
[
"build",
"--target", "release-stage",
"-t", "${LOCATION}-docker.pkg.dev/${PROJECT_ID}/${REPO_NAME}-api/release:latest",
"-t", "${LOCATION}-docker.pkg.dev/${PROJECT_ID}/${REPO_NAME}-api/release:${REVISION_ID}",
"--cache-from", "${LOCATION}-docker.pkg.dev/${PROJECT_ID}/${REPO_NAME}-api/release:latest",
".",
]
dir: "api"
しかし、kaniko を使用する場合は以下のように、引数として context
で指定してあげる必要があります。[2]
steps:
- name: 'gcr.io/kaniko-project/executor:latest'
args:
- --destination=${LOCATION}-docker.pkg.dev/${PROJECT_ID}/${REPO_NAME}-api/release:${REVISION_ID}
- --destination=${LOCATION}-docker.pkg.dev/${PROJECT_ID}/${REPO_NAME}-api/release:latest
- --cache=true
- --context=dir://api
- --skip-unused-stages
- --target=release-stage
例えば、以下のように指定すると、ビルドは始まってくれるのですが、COPY
などの指定がリポジトリルートからの相対パスになってしまいます。
steps:
- name: 'gcr.io/kaniko-project/executor:latest'
args:
- --destination=${LOCATION}-docker.pkg.dev/${PROJECT_ID}/${REPO_NAME}-api/release:${REVISION_ID}
- --destination=${LOCATION}-docker.pkg.dev/${PROJECT_ID}/${REPO_NAME}-api/release:latest
- --cache=true
- --skip-unused-stages
- --target=release-stage
dir: "api"
Discussion