概要
よく忘れるので、ここにメモメモ。。。
Dockerビルドの拡張であるBuiltKitを有効にするやり方です。
そもそも、Docker Desktop for Windows とかだと、デフォルトで有効ですので、あまり気になっていないかもしれませんが。
BuildKitが有効かどうかを確認
/etc/docker/daemon.json
(Windows の場合は C:\ProgramData\docker\config\daemon.json
) に
"features": { "buildkit": true },
ってなってたら既定で有効です。
DOCKER_BUILDKIT環境変数をセット
DOCKER_BUILDKIT=1
と設定した状態で docker image build
するとBuiltKitが有効になった状態でビルドされます。
以下のようなDockerfileがあるとして
# syntax=docker/dockerfile:1-labs FROM busybox:latest WORKDIR /workspace # ヒアドキュメント機能は docker/dockerfile:1.3-labs から有効 RUN <<EOF echo 'hello' >> hello.txt echo 'world' >> world.txt cat hello.txt world.txt > helloworld.txt EOF CMD [ "cat", "helloworld.txt" ]
これをBuildKitなしの環境でビルドするとエラーになります。
$ DOCKER_BUILDKIT=0 docker image build -t no_builtkit -f Dockerfile ${PWD} Sending build context to Docker daemon 4.096kB Error response from daemon: dockerfile parse error line 8: unknown instruction: ECHO
今度は環境変数で有効にした状態でビルドすると
$ DOCKER_BUILDKIT=1 docker image build -t use_env -f Dockerfile ${PWD} [+] Building 4.2s (13/13) FINISHED => [internal] load build definition from Dockerfile => => transferring dockerfile: 38B => [internal] load .dockerignore => => transferring context: 2B => resolve image config for docker.io/docker/dockerfile:1-labs => [auth] docker/dockerfile:pull token for registry-1.docker.io => CACHED docker-image://docker.io/docker/dockerfile:1-labs@sha256:250ce669e1aeeb5ffb892b18039c3f0801466536cb4210c8eb2638e628859bfd => [internal] load build definition from Dockerfile => [internal] load .dockerignore => [internal] load metadata for docker.io/library/busybox:latest => [auth] library/busybox:pull token for registry-1.docker.io => [1/3] FROM docker.io/library/busybox:latest@sha256:52817dece4cfe26f581c834d27a8e1bcc82194f914afe6d50afad5a101234ef1 => CACHED [2/3] WORKDIR /workspace => CACHED [3/3] RUN <<EOF (echo 'hello' >> hello.txt...) => exporting to image => => exporting layers => => writing image sha256:5fc640f5f4d61b0d717dd3a7d443589ef63f83bf99036b375d8e21f1cf619661 => => naming to docker.io/library/use_env
ちゃんとビルドできます。
docker buildx
を使う
環境変数を指定しなくても、docker buildx build ...
を使えば、BuildKitが有効状態でビルドできます。
$ docker buildx build -t use_buildx -f Dockerfile ${PWD} [+] Building 8.4s (13/13) FINISHED => [internal] load build definition from Dockerfile => => transferring dockerfile: 341B => [internal] load .dockerignore => => transferring context: 2B => resolve image config for docker.io/docker/dockerfile:1-labs => [auth] docker/dockerfile:pull token for registry-1.docker.io => CACHED docker-image://docker.io/docker/dockerfile:1-labs@sha256:250ce669e1aeeb5ffb892b18039c3f0801466536cb4210c8eb2638e628859bfd => [internal] load .dockerignore => [internal] load build definition from Dockerfile => [internal] load metadata for docker.io/library/busybox:latest => [auth] library/busybox:pull token for registry-1.docker.io => [1/3] FROM docker.io/library/busybox:latest@sha256:52817dece4cfe26f581c834d27a8e1bcc82194f914afe6d50afad5a101234ef1 => => resolve docker.io/library/busybox:latest@sha256:52817dece4cfe26f581c834d27a8e1bcc82194f914afe6d50afad5a101234ef1 => => sha256:52817dece4cfe26f581c834d27a8e1bcc82194f914afe6d50afad5a101234ef1 2.29kB / 2.29kB => => sha256:d5c6e74e3115b55dce759c1b3a52b1d2db60dc6929681de2f76cdc5d6f4d7412 527B / 527B => => sha256:d23834f29b3875b6759be00a48013ba523c6a89fcbaeaa63607512118a9c4c19 1.45kB / 1.45kB => => sha256:3aab638df1a9e5bd507442990a0fa8f97c2c48870922f44675c22d0b9060cf66 772.79kB / 772.79kB => => extracting sha256:3aab638df1a9e5bd507442990a0fa8f97c2c48870922f44675c22d0b9060cf66 => [2/3] WORKDIR /workspace => [3/3] RUN <<EOF (echo 'hello' >> hello.txt...) => exporting to image => => exporting layers => => writing image sha256:c1e6256db06187345ee64013516939b8ecb470fefa84288d29ae070d8411216b => => naming to docker.io/library/use_buildx
ちゃんとビルドできます。
参考情報
過去の記事については、以下のページからご参照下さい。
- いろいろ備忘録日記まとめ
サンプルコードは、以下の場所で公開しています。
- いろいろ備忘録日記サンプルソース置き場