Dockerfileのヒアドキュメントを試す

概要

docker/dockerfile:1.3.0-labsからDockerfileでヒアドキュメントがサポートされた。

https://github.com/moby/buildkit/blob/master/frontend/dockerfile/docs/syntax.md#here-documents

This feature is available since docker/dockerfile:1.3.0-labs release.

ざっくり経緯

  • RUN命令を何度も書くと不要なレイヤが増えビルド時間とイメージサイズの増加につながる
  • これに対し、&&と\を使ってまとめると見づらく、シンタックスエラーを誘発する

これらを解消するためにヒアドキュメントを導入する。

前提知識

BuildKit使ったことあるけどsyntax directiveを使ったことがない方

環境

docker --version
Docker version 20.10.7, build f0df350

動作検証

Dockerfile

# syntax=docker/dockerfile:1.3-labs
FROM ubuntu
RUN <<EOF
apt-get update
apt-get install -y nginx
EOF

ビルド

docker built . -t hoge

確認

docker run -it --rm hoge nginx -v
nginx version: nginx/1.18.0 (Ubuntu)

問題なくnginxがインストールされていることを確認。

syntaxについて

# syntax=docker/dockerfile:1.3-labs <--
FROM ubuntu

syntaxとは

https://docs.docker.com/engine/reference/builder/#syntax
BuildKitではDockerfileをビルドするための仕組みをDocker Imageとして配布している。
そのイメージを指定する機能。

docker/dockerfileとは

https://hub.docker.com/r/docker/dockerfile

Official Dockerfile frontend images that enable building Dockerfiles with BuildKit.

BuildKitでDockerfileをビルドするための公式Docker Image

xxx-labsとは

https://docs.docker.com/engine/reference/builder/#syntax

The “labs” channel provides early access to Dockerfile features that are not yet available in the stable channel. Labs channel images are released in conjunction with the stable releases, and follow the same versioning with the -labs suffix

アーリーアクセス機能

参考

公式ブログは下記
https://www.docker.com/blog/introduction-to-heredocs-in-dockerfiles/

ヒアドキュメントとはなにか
https://en.wikipedia.org/wiki/Here_document

まとめ

ヒアドキュメントを試すついでにsyntax directiveについてまとめた。
VSCodeシンタックスハイライトはヒアドキュメントに未対応。

https://www.docker.com/blog/introduction-to-heredocs-in-dockerfiles/

For now, they’re still only available in the staging frontend, but they should be making their way into a release very soon

もう少し待ってstableになってから使うという判断でよいでしょう。