概要
よく忘れるので、ここにメモメモ。。。
最近のDockerfileでは シェルスクリプト のようにヒアドキュメントが使えるようになっています。
使うためには条件があって、
DOCKER_BUILDKIT
が有効になっている- Dockerfileのシンタックスバージョンが
docker/dockerfile:1.3-labs
以降
ということになっています。
BUILDKITに関しては
を参照ください。
Dockerfileのシンタックスバージョンというのは、Dockerfileの先頭に「どのバージョンのDockerfileスペックを適用するか」を明示することです。
ヒアドキュメント機能は、シンタックスバージョン 1.3-labs
以降が必要なので、以下のように指定します。
# syntax=docker/dockerfile:1-labs FROM golang:1.17-alpine
ヒアドキュメントが使える場合、DockerfileでRUN命令を書く場合にすごく見やすくなるので個人的に好きです。
イメージをビルドする場合は、以下のどれかで行います。
- BUILDKITが既に有効な場合
- 普通に
docker image build -t xxx ${PWD}
でビルド出来ます
- 普通に
- BUILDKITが有効でない状態
DOCKER_BUILDKIT=1 docker image build -t xxx ${PWD}
でビルド出来ます
DOCKER_BUILDKIT
が有効かどうかわからんdocker buildx build -t xxx ${PWD}
でビルド出来ます(Docker自身のバージョンが古いと無理かも)
サンプル
# syntax=docker/dockerfile:1-labs FROM golang:1.17-alpine RUN <<EOF apk add --no-cache make gcc libc-dev musl-dev go install github.com/go-delve/delve/cmd/dlv@latest EOF WORKDIR /workspace
build: docker buildx build -t godev -f Dockerfile ${PWD} run: docker container run \ --init \ --interactive \ --tty \ --rm \ godev
実行してちゃんとビルドできるかを確認してみます。
$ make build docker buildx build -t godev -f Dockerfile /workspaces/try-docker/heredocs_in_dockerfile [+] Building 32.3s (13/13) FINISHED => [internal] load build definition from Dockerfile => [internal] load .dockerignore => resolve image config for docker.io/docker/dockerfile:1-labs => [auth] docker/dockerfile:pull token for registry-1.docker.io => [internal] load .dockerignore => [internal] load build definition from Dockerfile => [internal] load metadata for docker.io/library/golang:1.17-alpine => [auth] library/golang:pull token for registry-1.docker.io => [1/3] FROM docker.io/library/golang:1.17-alpine@sha256:4918412049183afe42f1ecaf8f5c2a88917c2eab153ce5ecf4bf2d55c1507b74 => [2/3] RUN <<EOF (apk add --no-cache make gcc libc-dev musl-dev...) => [3/3] WORKDIR /workspace => exporting to image => => exporting layers ↑↑途中経過のログは割愛↑↑
ちゃんと => [2/3] RUN <<EOF (apk add --no-cache make gcc libc-dev musl-dev...)
という部分でエラーにならずに実行されていますね。
参考情報
過去の記事については、以下のページからご参照下さい。
- いろいろ備忘録日記まとめ
サンプルコードは、以下の場所で公開しています。
- いろいろ備忘録日記サンプルソース置き場