LoginSignup
13
10

環境差異のない環境を簡単に共有・デプロイできることから、開発環境だけではなく本番環境でも広く利用されているDockerですが、あなたの書いているそのdocoker-compose.yamlは仕様に添えていますか?

GitHub等でDockerを用いた環境構築用のrepoを見ていると、未だにdocker-compose.yamlやcomposeファイル内でのversion記述をよく見かけます。

docker-compose.yamlは非推奨

2024年7月現在、docker-compose.yamlは非推奨となっています。
Composeファイルの仕様を定めているcompose-specCompose 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)で検証してみたところ、パラメータとしてファイルを指定しない限り、以下の優先順位で実行されました。

  1. compose.yaml (最も優先される)
  2. compose.yml
  3. docker-compose.yml
  4. docker-compose.yaml

(この辺が関係してたりするんですかね?)

versionプロパティは非推奨

最新のDocker環境で、compose.yamlversionプロパティを指定すると、'version' is obsoleteという警告が出力されます。

ビルド自体には問題ないのですが、compose-specVersion and name top-level elementsによると、非推奨になっているようです。

Compose V1の仕様では、versionを見てファイルの検証が行われていましたが、現在は、後方互換性のために仕様そのもの定義されてはいるものの、このversionの指定値を元にファイルの検証を行うべきではないとされており、もはや不要な項目となっています。

バージョンの差異で正常に動かなさそうではあるのですが、どうやら、古い2.x系と3.x系を1つにまとめて共通のプロパティを統合してよしなにしてるらしいです。

おわりに

Compose v2以降、docker-composeコマンドはdockerコマンドのサブコマンドとなり、docker composeという形式で使用されるようになりました。
この点は私も認識していましたが、versionプロパティが非推奨化されていたことは把握しておらず、多くのリポジトリ等で依然として使用されていることを踏まえ、周知のためにも投稿しました。

この記事が誰かのお役に立てれば幸いです。

13
10
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
13
10