環境差異のない環境を簡単に共有・デプロイできることから、開発環境だけではなく本番環境でも広く利用されているDockerですが、あなたの書いているそのdocoker-compose.yaml
は仕様に添えていますか?
GitHub等でDockerを用いた環境構築用のrepoを見ていると、未だにdocker-compose.yaml
やcomposeファイル内でのversion記述をよく見かけます。
docker-compose.yaml
は非推奨
2024年7月現在、docker-compose.yaml
は非推奨となっています。
Composeファイルの仕様を定めているcompose-specのCompose fileの項目を見ると、
The default path for a Compose file is compose.yaml (preferred) or compose.yml that is placed in the working directory. Compose also supports docker-compose.yaml and docker-compose.yml for backwards compatibility of earlier versions. If both files exist, Compose prefers the canonical compose.yaml.
Compose ファイルのデフォルトパスは compose.yaml(推奨)または compose.yml で、作業ディレクトリに置かれます。Compose は、以前のバージョンとの後方互換性のために docker-compose.yaml および docker-compose.yml もサポートしています。両方のファイルが存在する場合は、compose.yaml を優先します。
と書かれています。
後方互換のためにdocker-compose.yaml
も仕様できますが、非推奨となっている以上、仕様に則ったcompose.yaml
を用いるべきでしょう。
未だ多くの環境でdocker-compose.yaml
ファイルを見かけますが、将来的なサポート停止や今後、互換性問題などが浮上する可能性もありますので、極力移行しておきましょう。
ちなみに、手元の環境(Docker Compose v2.26.1)で検証してみたところ、パラメータとしてファイルを指定しない限り、以下の優先順位で実行されました。
- compose.yaml (最も優先される)
- compose.yml
- docker-compose.yml
- docker-compose.yaml
(この辺が関係してたりするんですかね?)
versionプロパティは非推奨
最新のDocker環境で、compose.yaml
にversion
プロパティを指定すると、'version' is obsolete
という警告が出力されます。
ビルド自体には問題ないのですが、compose-specのVersion and name top-level elementsによると、非推奨になっているようです。
Compose V1
の仕様では、version
を見てファイルの検証が行われていましたが、現在は、後方互換性のために仕様そのもの定義されてはいるものの、このversion
の指定値を元にファイルの検証を行うべきではないとされており、もはや不要な項目となっています。
バージョンの差異で正常に動かなさそうではあるのですが、どうやら、古い2.x系と3.x系を1つにまとめて共通のプロパティを統合してよしなにしてるらしいです。
おわりに
Compose v2以降、docker-compose
コマンドはdocker
コマンドのサブコマンドとなり、docker compose
という形式で使用されるようになりました。
この点は私も認識していましたが、version
プロパティが非推奨化されていたことは把握しておらず、多くのリポジトリ等で依然として使用されていることを踏まえ、周知のためにも投稿しました。
この記事が誰かのお役に立てれば幸いです。