概要
先日出たDocker Compose v2.17.3から dockerfile_inline
という構文で compose.yaml
にDockerfileをインラインで書けるようになりました。これのなにがうれしいかというと、メインのアプリケーションではなく周辺のミドルウェアなどでDockerfile書くほどでもないんだけど、ちょっとだけカスタマイズしたいみたいなのが書きやすくなる。
※厳密に言うと dockerfile_inline
という構文自体はcompose v2.17.0から追加されましたが、初期実装はバグがあり機能してなかったので、実質まともに使えるようになったのはv2.17.3からです。
環境
本稿執筆時点の最新版のDocker Desktop for Mac v4.19.0にバンドルされてるcomposeがv2.17.3だったので、とりあえず最新に上げて試します。
$ docker compose version
Docker Compose version v2.17.3
$ docker version
Client:
Cloud integration: v1.0.31
Version: 23.0.5
API version: 1.42
Go version: go1.19.8
Git commit: bc4487a
Built: Wed Apr 26 16:12:52 2023
OS/Arch: darwin/arm64
Context: default
Server: Docker Desktop 4.19.0 (106363)
Engine:
Version: 23.0.5
API version: 1.42 (minimum version 1.12)
Go version: go1.19.8
Git commit: 94d3ad6
Built: Wed Apr 26 16:17:14 2023
OS/Arch: linux/arm64
Experimental: false
containerd:
Version: 1.6.20
GitCommit: 2806fc1057397dbaeefbea0e4e17bddfbd388f38
runc:
Version: 1.1.5
GitCommit: v1.1.5-0-gf19387a
docker-init:
Version: 0.19.0
GitCommit: de40ad0
本題と関係ないですが、Docker Desktop v4.19.0 からDocker Engineがついにv20.10系からv23.0系になりました。やったね。
https://docs.docker.com/desktop/release-notes/#4190
やってみた
公式ドキュメントはこちら
https://docs.docker.com/compose/compose-file/build/#dockerfile_inline
試しに適当なalpineのベースイメージにcurlを追加してみる。
services:
curl:
build:
context: .
dockerfile_inline: |
FROM alpine
RUN apk --no-cache add curl
ENTRYPOINT ["curl"]
ビルド
$ docker compose build
実行
$ docker compose run --rm curl -sI https://google.com | head -1
HTTP/2 301
よさそう。
別にDockerfile書くのと機能的には変わらないんですが、 compose.yaml
1枚に書けると、シュッとコピペしやすくなるのもうれしい気がする。
余談
compose v2から docker-compose
コマンドは docker compose
になっており、ファイル名は compose.yaml
が公式に推奨されています。
後方互換性のため docker-compose.yaml
or docker-compose.yml
も読み込まれますが、ファイル内にフォーマット version
指定も不要です。おやっと思った人は、知識がcompose v1で止まってそうですが、compose v1は2023年6月にEOLの予定なので、知識もv2にアップデートしておきましょう。
おしまい。