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になってから使うという判断でよいでしょう。