Compose V2 一般提供 (GA 版) 開始のお知らせ

Docker は、Docker Compose Version 2 (通称 V2) の一般提供 (GA 版) の開始を発表でき、嬉しく思っています。

Docker では、2021年 6月に Compose V2 の最初のバージョンをローンチしました。皆様からのフィードバックのおかげで、最初のロールアウトから数々の改善を行い、この 10ヶ月でユーザー間で着実に V2 の導入が進んでおり、既に V2について良い評判をたくさん頂いています。現在、最新バージョンの Docker Desktop を実行している Docker Compose ユーザーの 78% が Compose V2 を使用しており、本番ワークフローで一般提供できることをうれしく思っています。

移行について知っておくべきこと

Compose V2 の GA はいつで、どのようなことを意味しますか?

2022年 4月 26日、Docker Compose V2 の GA を迎えました。Compose V2 はすべてのドキュメントで標準となり、Compose V2 は Docker Desktop の開発者用デフォルトとなります。しかし、docker-composedocker compose にエイリアスし、Docker Desktop UI から、または docker-compose disable-v2 コマンドを入力して、V2 をオプトアウトすることは可能です。

Compose V1 はどうなりますか?

現在、Compose V1  は非推奨とされています。次のマイルストーンまでは、優先度の高いセキュリティ パッチと重要なバグフィックスのみが V1 に適用されます。このブログの後半で、Docker Compose V1 の EOL (End of Life) のタイムライン案について説明します。

現在のところ、docker-compose から docker compose へのエイリアシングを削除する予定はありません。V2の使用状況を継続的に把握しながらフィードバックを収集し、順次調整していきます。

開発者として必要なことはありますか?

ほとんどの場合、何もする必要はありません。Docker Desktop のバージョン 3.4 以上では、Compose V2 が自動的にインストールされます。Docker Desktop のバージョン 4.4.2 以降では、デフォルトで docker-compose の構文を docker compose にエイリアスすることができるようになりました。これにより、V2 を V1 の代替として、スクリプトの更新を最小限に抑えながら使用することができます。

エイリアシングを使用しているかどうかは、Docker Desktop の 「General」 設定タブで、「Use Docker Compose V2」 が選択されているかどうかを確認することができます。移行に関する詳細は、本ブログの 「Compose V1 を使用している場合の対処法」 を参照してください。

Linux を使用している場合は?

Docker Desktop for Linux には、Compose V2 が含まれています。手動で Docker Compose V2 for Linux をインストールすることも可能です。Moby v20.10.13 では、オプションの Docker CLI プラグインとして compose-plugin が含まれており、より簡単にインストールすることができます。詳しくはドキュメントをご覧ください。

Dockerはなぜこの移行を行い、V2 を使用する必要があるの?

Compose V2 は Compose V1 のすべての機能を提供し、マルチコンテナ アプリケーションを効率的に実行できるよう支援します。Go への移行は、Dockerが最も好んだロードマップ項目の 1 つであり、より多くの機能をより速いスピードで提供することが可能になりました。これらは現在 Docker CLI に統合され、Docker のツール全体でシームレスなユーザーエクスペリエンスを実現しています。

次に、V2 への移行のプロセスとそのメリットについて説明します。

Compose V1  を使用している場合、どうすればよいですか?

Compose V2 がインストールされていることを確認する

Docker Desktop には、自動的に Docker Compose V2 が含まれています。また、Docker Desktop for Linux にも Compose V2 が含まれています。Linux では、手動で Docker Compose V2 をインストールすることもできます。また、インストールを簡単にするために、オプションの compose-pluginMoby v20.10.13 Docker CLI に同梱しています。なお、Compose V2 は Go プロジェクトなので、Python のライブラリとしては提供されません。Compose V1  のみ  pip  で利用可能です。詳しくは、ドキュメントをご参照ください。

docker-compose を docker compose にエイリアスする

Docker Desktop の 「General」 タブにある 「Use Docker Compose V2」 オプションを切り替えます。これにより、docker-compose コマンドは docker compose にエイリアスされます。V2 は V1 の置き換えとして、最小限のスクリプトの更新で簡単に使用することができます。

V1  と  V2  の互換性の確保

Compose V1  と  Compose V2  の互換性を確保することは、日々のワークフローに支障をきたすことなく  Compose V2  を活用するために非常に重要です。以下は、Compose V2  で導入された  2  つの重要な変更点と、その緩和策です。また、Compose V2  では実装されていない  Compose V1  のフラグをいくつか非推奨としました。これらの変更点の詳細については、互換性ドキュメントをご覧ください。

変更点

潜在的影響

緩和策

BuildKit のサポートは、Docker CLI と同様に V2 内にネイティブに存在し、デフォルトで有効。

V2 での開発者は、デフォルトでBuildKit を使用。

DOCKER_BUILDKIT=0 とすることで、オプトアウトすることが可能。

コンテナ名の区切り文字に、アンダースコアではなくハイフンを使用。

スクリプトの中でコンテナ名に依存すると、重大な変更を引き起こすため、一般的に、コンテナ名に依存することは避けるべき。

フラグ “-compatibility” を渡すことで、これをオフにすることが可能。

Docker Compose V2  は  Compose V1  のドロップイン置き換えです。ほとんどの場合、dash を削除するか、docker-compose から docker compose へのエイリアシングを有効にして、追加の変更なしに継続することができます。

Docker Compose V1 はどうなりますか?

Dockerは、Compose V2 への移行に十分な時間をとってもらいたいと考えています。Docker Compose V1 はすぐには廃止されず、開発者は一時的に V1 に戻すことも可能です。

Docker Compose V2 の卒業が意味するものは、以下の通りです。

  • Docker Compose V2 ブランチは GitHub のデフォルトになりました。
  • Docker Compose V1 はまだ master ブランチで見つけることができます。
  • Compose V1 は非推奨とされ、次のマイルストーンまで、深刻度の高い脆弱性のみへのパッチ適用や、重要なバグの修正が行われる予定です。
  • 開発者は引き続き docker-compose というエイリアスを用いて docker compose を使用することができます。
  • 開発者は引き続き、Docker Desktop UI または docker-compose disable-v2 コマンドで  V2 をオプトアウトすることができます。
  • Compose V1 はオープンソースのままですが、新機能の開発は終了しています。コミュニティから提出されたバグフィックスやセキュリティパッチは引き続き監視し、必要に応じてマージしていきます。

Compose V1  のライフサイクル終了スケジュール案

Compose V2 への移行が順調に進んでいることから、Docker Compose V1 の終了時期 (EOL) について、以下のように考えています。

Compose V2  のメリットは何ですか?

1) Docker CLI 内の新機能の迅速な提供

Compose V2 への移行に伴い、多くの便利な新機能が搭載されました。

  • GPU マシンのサポート – Docker ホストに GPU デバイスがあり、Docker Daemon がそれに応じて設定されている場合、Compose サービスは GPU デバイスの予約を定義することができます。
  • プロファイルのサポート – プロファイルは、選択的なサービスの有効化により、Compose アプリケーションモデルを様々な用途や環境に適応させることができます。
  • docker compose ls コマンドは、Compose アプリケーションの全リストを表示できるようになりました。
  • docker compose cp コマンドは、サービスコンテナとローカルファイルシステム間でファイルやフォルダをコピーすることができます。

これらの機能は Docker CLI に含まれます。各 Docker Desktop は、CLI へのアップデートを自動的に適用するため、管理負荷が軽減されます。

2) 本番環境へのシームレスなパス

プロジェクトを簡単に構成して、AWS や ECS 環境、あるいは Azure ACI で直接実行できるとしたらどうでしょう?Compose V2 では、新しいクラウド インテグレーションにより、可能になります。

ローカルでの開発に Docker Compose を、そして本番環境に ACI や ECS を使用している場合、Docker Compose アプリケーションのクラウドへのデプロイがより簡単になりました。Docker コンテキストを切り替え、Amazon ECSやMicrosoft ACI上でアプリを起動するだけで、クラウド プラットフォーム上でプリケーションを構成できます。

V2 内の Compose 仕様がこれを可能にします。Compose 仕様では、プラットフォームに依存しないマルチコンテナ アプリケーションを定義することができます。他のプログラムは、この仕様を使用して、これらのファイルを検証し、実行することができます。また、Compose-go も導入されました。これは、Compose ファイルの解析と表現を行う Go の実装です。これは、Amazon ECS、Microsoft ACI、またはKubernetes の統合を使用する実装で共通です。

3) Go による均質なDockerエコシステムの構築

Compose V2 以前の Docker Compose V1 は Python で書かれており、Docker のエコシステムの中で異彩を放っていました。一方、Compose V2 は Go で書かれています。V2 は、Moby や CLI、Go ベースのプロジェクトからのコードをベンダリングすることができます。Docker Compose の Go への移行により、Python で新機能やバグフィックスを書き直す必要がなくなりました。

Docker CLI からの修正を Compose でより簡単に統合できるようになりました。これにより、Docker エコシステム全体で共有される関数をホストするための標準的な場所が提供され、シームレスな再利用が促進されます。したがって、私たちのツール全体において、より多くの価値を迅速に提供することができます。また、BuildKit のような他の Docker ツールから Compose に簡単にアップデートを追加することができます。

例えば、Compose と Docker CLI の両方で、run コマンドと exec コマンドに同じコードを使用するようになりました。これにより、dockerdocker compose の両方を実行しながら、十分にテストされた動作を維持することができるのです。ログ出力に至るまで一貫しているので、開発者は簡単に切り替えができるようになりました。

4) Compose バイナリによるより簡単な更新と依存性の管理

Go では、以前は不可能だった静的バイナリ (GNU/Linux における glibc と libmusl のようないくつかの問題を回避) をリリースできるようになりました。これは、Python がビルトイン コンパイラを持っていないためです。そのため、主要なプラットフォーム (GNU/Linux, macOS, Windows) 用のバイナリを生成するために、pyinstaller に頼らざるを得ませんでした。より異質なプラットフォームに対しては、V1 は PyPI  (pip install) に依存し、依存関係の管理を複雑にしています。すでにインストールされている依存関係の組み合わせが多岐に渡る可能性があります。

Go 言語は、$GOOS$GOARCH、そして $GOARM を通してクロスコンパイルを解除します (完全なリストについては Go のドキュメントを参照してください)。Raspberry Piで静的バイナリを使用し、pip install を回避することができます。

最後に、ネイティブで実行する方がずっと速くなります!

5) Compose ファイルがなくてもコマンドを実行

最後に、コンテナ ラベルを使えば、YAML ファイルに含まれる情報を再現することができます。この機能により、コマンドラインに -project-name を追加するだけで実行中のプロジェクトを管理でき、オリジナルの  Compose ファイルや環境変数なしで docker compose start/stop/pause/down/ps/exec… などのコマンドを実行できるようになります。単純に -project-name (-p) を入力して設定した既存のプロジェクト名を取得します。

たとえば、次のコマンドでは、プロジェクト名のフォルダにいく必要はなく、Composeファイルをカレント ディレクトリに置く必要もありません。

 docker compose –project-name myproject down

次回 Docker Compose を使用する際は、ハイフンをスペースに置き換えて V2 を試してみてください。とても簡単です。

Docker Business の詳細は、弊社 Web サイトをご確認ください。

記事参照:
© 2022 Docker
2022 年 4 月 26 日

Announcing Compose V2 General Availability

シェアする

  • このエントリーをはてなブックマークに追加

フォローする