Jaybanuan's Blog

どうせまた調べるハメになることをメモしていくブログ

Composeファイルでのversion指定は意味なし

はじめに

Docker ComposeのComposeファイルでのversion指定は、現在では意味がないらしい。 ここで言うversionとは、以下に示すようなComposeファイルのversionのことである。

version: "3.8"
services:
  web:
    image: nginx:1.23.1

Docker Composeのドキュメントより

docs.docker.com

上掲のサイトより引用する。

The latest and recommended version of the Compose file format is defined by the Compose Specification. This format merges the 2.x and 3.x versions and is implemented by Compose 1.27.0+.

日本語訳すると以下。

Composeファイルのフォーマットの最新かつ推奨バージョンは、Compose Specificationで定義されています。 このフォーマットは2.xと3.xの両バージョンをマージしたもので、Compose 1.27.0以上で実装されています。

よって、Docker Composeのドキュメントに記載されている2.xと3.xのフォーマットは最新ではなく、最新はCompose Specificationであり、Composeファイルを書く際にはこのフォーマットに従うべし、となる(はず)。 上記引用の「recommended version (推奨バージョン)」は、バージョン番号というよりは、単に「版」という意味合いに思える。

Compose Specificationとは

Docker ComposeはDocker社が提供しているが、それのComposeファイルの仕様を標準化したものがCompose Specificationである。 2020年4月に標準化がアナウンスされている。

www.docker.com

Compose Specificationでのversionの取り扱い

Compose Specificationでのversionの取り扱いについては、以下で言及がある。

github.com

上掲のサイトより引用する。

Top-level version property is defined by the specification for backward compatibility but is only informative.

A Compose implementation SHOULD NOT use this version to select an exact schema to validate the Compose file, but prefer the most recent schema at the time it has been designed.

日本語訳すると以下。

この仕様で定義しているトップレベルのversionプロパティは、後方互換性のために残してあるだけで、参考情報にすぎません。

Composeの実装は、Composeファイルの妥当性検証用の正確なスキーマを選択する目的でversionを利用すべきではなく(SHOULD NOT)、Composeの実装を設計した時点での最新のスキーマを選択すべきです。

つまり、version後方互換性のための飾りで、Docker ComposeはCompose Specificationに則ったスキーマを利用する、ということである。