137
89

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

Docker Compose V2(Version 2) GA のまとめ

Last updated at Posted at 2022-04-29

dockerdesktop.png

概要

2022年4月26日、Docker Compose Version 2 (以下「Compose V2」と省略)が GA(一般提供開始)になったと Docker Blog で発表 がありました。

Docker Desktop を利用中の場合

既に macOS および Windows 、Linux (beta版) のDocker Desktop では Compose V2 が初めから入っています。また docker-compose コマンド(中身は環境確認のスクリプトであり、バイナリではありません)は、既に実体としての Compose V2 機能の docker compose を呼び出すか、Comose V1 の docker-compose-v1 を呼び出しています。

Linux 版 Docker Engine を利用中の場合

Linuxでは v20.10.13 以降、現在 current バージョンの v20.10.14 をセットアップすると、Docker CLI に Compose V2 が( Docker CLI プラグイン)として組み込み済みであり、 docker compose コマンドがすぐに使えます。以前のバージョンでも compose-plugin をセットアップすると、Compose V2 が利用できます。

今後 Compose V1 は非推奨、EOL まで猶予は1年(2023年6月以降)の予定

今後は Compose V2 が Docker の操作体系だけでなく、ドキュメント含めて標準となります。Compose V1 は Deprecated(非推奨)となり、現時点では、EOLまでの猶予期間が1年あるものの、移行のために準備が必要です。

Compose V2 が GA になった意味

Compose V2 は 2021年6月にリリースされた Docker Desktop 3.4 から提供開始となりました。この時から、docker-compose コマンドに加え、 docker compose サブコマンドがサポートされるようになり、開発が続いていました。

Compose V2 が docker compose のサブコマンドになると、従来、Docker Engine とは別に Docker Compose をセットアップしていた作業が不要となります。また、Compose V1 の場合は、Python スクリプトで記述されていため、Python の環境を pip 経由で入れるか、あるいは、各 OS 向けのバイナリのセットアップが必要でした。

Compose V2 が一般提供開始(General Availability)と宣言されたため、従来の docker-compose による Compose V1 は「Deprecated」(廃止される可能性があるため、非推奨)の位置付けとなり、

  • V1 は、今後の新規機能の追加停止
  • 重大なセキュリティや致命的なバグに対する修正のみ提供(2022年10月まで)
  • 2023年 4月EOL(予定) 6月以降予定

といったロードマップが予定されています( GitHub でフィードバックを受け付け中 であり、私たちの反応次第で変わる可能性が示唆されています)。

既に docker compose コマンドを使えば、自動的に Compose V2 を使う状態です。

docker-compose コマンドを使っている場合、Docker Desktop であればユーザーインターフェース上の設定で、V1 を使うか、V2 を使うかを選択できます。

EOL になった後は、docker-compose のエイリアスは維持されますが、Docker Desktop のユーザーインターフェスから V2 有効化・無効化の選択ができなくなります(必ず V2 を使うようになります)。

Compose V1 と Compose V2 の違い

大きな違いは、見た目のコマンドです。 Compose V1 は docker-compose ですが、 Compose V2 は docker compose です。現在の Docker Compose は、両方のバージョンが共存できます。

Compose V1
$ docker-compose version
docker-compose version 1.29.2, build 5becea4c
docker-py version: 5.0.0
CPython version: 3.9.0
OpenSSL version: OpenSSL 1.1.1g  21 Apr 2020
Compose V2
$ docker compose version
Docker Compose version v2.3.3

単にコマンドが違うだけでなく、細部では違いがあります。分かりやすい違いとしては、コンテナ名の命名規則が Compose V1 の「_」から、Compose V2 は「-」に変わります。

これまでは プロジェクト名_サービス名_番号でしたが、
プロジェクト名-サービス名-番号となります。

以下は、同じ docker-compose.yaml を V1 と V2 で起動し、 docker ps で見た結果です。 NAMES 列のコンテナ名が違います。

Compose V1
$ docker ps
CONTAINER ID   IMAGE        COMMAND                  CREATED         STATUS         PORTS
       NAMES
a46f50068c28   tmp_check1   "/docker-entrypoint.…"   5 seconds ago   Up 3 seconds   80/tcp
       tmp_check1_1
22542f496500   wordpress    "docker-entrypoint.s…"   5 seconds ago   Up 3 seconds   0.0.0.0:8080->80
/tcp   tmp_wordpress_1
7dc008c51589   mysql:5.7    "docker-entrypoint.s…"   5 seconds ago   Up 3 seconds   3306/tcp, 33060/
tcp    tmp_db_1
Compose V2
$ docker ps
CONTAINER ID   IMAGE        COMMAND                  CREATED       STATUS       PORTS
   NAMES
226a890516bc   mysql:5.7    "docker-entrypoint.s…"   2 hours ago   Up 2 hours   3306/tcp, 33060/tcp
   tmp-db-1
cf167b06aee4   tmp_check1   "/docker-entrypoint.…"   2 hours ago   Up 2 hours   80/tcp
   tmp-check1-1
d261092d22b1   wordpress    "docker-entrypoint.s…"   2 hours ago   Up 2 hours   0.0.0.0:8080->80/tcp
   tmp-wordpress-1

Compose V2 は、基本的には Go 言語で作り直されたものです。ほぼ多くの V1 の仕様が移行されたようですが、一部は実装されていないものもあります。違いの詳細は、 互換性についてのページ をご覧ください。

Docker Desktop (macOS / Windows / Linux (beta) で Compose V2 を使うには

Docker Desktop 3.4 以上では、既に Compose V2 が自動でインストールされています。また、Docker Desktop 4.4.2 以上では、デフォルトで docker-compose コマンドが、 docker compose のエイリアスになっています。

docker compose コマンドを使用中の場合

そのため、 docker compose コマンドを普段から使っている状態であれば、Compose V2 が GA になったからと、何か特段対応は必要ありません。これまで通り使い続けられます。

docker-compose コマンドを使用中の場合

コマンド docker-compose は Compose V1 相当のため、Copmose V2 への移行が必要です(アナウンスでは、ただちに速やかな移行ではなく、時間をかけての移行が必要と書かれています)。

Docker Desktop では、コマンドラインで Compose V1 と Compose V2 の切り替えが可能です。

  • docker-compose disable-v2docker-compose で Compose V1 を有効化
  • docker-compose enable-v2docker-compose で Compose V2 を有効化

コマンドラインでスムーズに切り替え可能なため、現行の docker-compose.yaml や環境等が正常に動作するかどうかが確認できます。

あるいは、Docker Desktop のユーザーインターフェースからは、「Settings」→「Generals」に「Use Docker Compose V2」という項目があります。ここにチェックを入れ、「Apply & Restart」を実行しても、 docker-compose enable-v2 を実行したのと同じ状態です。

image.png

Docker Engine (Linux) で Compose V2 を使うには

現在 current バージョンとして提供中の Docker Engine v20.10.14 を含め、v20.10.13 からは docker compose が既に使える状態です。これは、 Docker CLI プラグインとして compose-plugin を内蔵しているためです。

$ docker compose version
Docker Compose version v2.3.3

それよりも古いバージョンで Compose V2 を有効にするには、compose-plugin をセットアップします。

以下は、自分のホームディレクトリに入れる例です。

$ DOCKER_CONFIG=${DOCKER_CONFIG:-$HOME/.docker}
$ mkdir -p $DOCKER_CONFIG/cli-plugins
$ curl -SL https://github.com/docker/compose/releases/download/v2.4.1/docker-compose-linux-x86_64 -o $DOCKER_CONFIG/cli-plugins/docker-compose
$ chmod +x $DOCKER_CONFIG/cli-plugins/docker-compose

あとは、 docker compose version コマンドを実行すると、バージョン情報が確認できます。

$ docker compose version
Docker Compose version v2.4.1

また、この手順はホームディレクトリ以下に置きましたが、サーバ全t内で利用できるようにするには、 ~/.docker/cli-plugins/usr/local/lib/docker/cli-plugins に移動します。

なお、Compose V2 が入った状態でも、現時点では Compose V1 の docker-compose との共存は可能です。それぞれ、独立して利用できます。

参考(reference)

omake

V2 の件、自分の現状確認や検証も兼ねて書きました。

Enjoy!

137
89
1

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
137
89

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?