はじめに
ちょっと前の話になるのだが、Docker Compose V2 が GA となったのでアップデートの内容などを簡単にまとめておく。
Announcing Compose V2 General Availability - Docker
これまで Docker CLI からは独立(別途インストールも必要だった)していた Docker Compose V1 は、V2 で正式に Docker CLI Plugin となった。
Docker CLI plugin とは、Docker CLI にプラグインとしてサブコマンドを追加できる機能で、下記でプラグインの一覧を確認できる。1
$ ls -1 /usr/local/lib/docker/cli-plugins/* | grep compose
/usr/local/lib/docker/cli-plugins/docker-compose
使用者側への影響
Docker Desktop v3.4 以上を使っている場合は、自動で Compose V2 がインストールされ、特に開発者側でセットアップすることはない。
また、Docker Desktop v4.4.2 以降を使用している場合ではデフォルトで docker-compose
から docker compose
コマンドへのエイリアスが適用される。今まで通り docker-compose
も使用できるので、既存のスクリプトへの影響はなさそうなので安心だ。
Docker Desktop の設定画面の下記の部分で設定を自由に切り替えできる。
Docker Compose V2 でのアップデート
公式のアナウンスにある 5 つの項目について 1 つずつ見ていこうと思う。
1) Fast Delivery of New Features Within the Docker CLI
- GPU アクセスをサポート
- Profiles 機能のサポート
- Using profiles with Compose | Docker Documentation
- Docker Compose で動作する複数のコンテナ群を profiles というプロパティでカテゴリ分けする機能。
- サブコマンド
docker compose ls
docker compose cp
2) Seamless Path to Production
Cloud Integuration という機能により AWS や Azure といったクラウドプラットフォームへのデプロイが可能となった。まだ手元で確認したわけではないが、Context を切り替えて docker compose up
するだけでデプロイできるといったイメージだろう。
現在は Amazon Elastic Container Service(ECS) と Microsoft Azure Container Instances(ACI) に対応しているとのこと。
# 簡単にイメージだけを示すとこんな感じ
$ docker context create ecs my-ecs
$ docker context use my-ecs
$ docker compose up
実際にどういう挙動になるのかは今後試してみたい。試してみたい方は こちら にチュートリアルがあったので参考にして欲しい。
3) Creating a Homogenous Docker Ecosystem in Go
Compose V1 は Python で書かれていたのが V2 では Go で書き直された。
Docker 自体は Go で書かれているため今回の変更でより全体への統合がしやすくなったようだ。使用する側からは普段あまり意識することはないが、新しい変更が Docker エコシステムで共有しやすくなり結果としてリリースのスピードが上がったのではないだろうか。
また公式のアナウンスから引用すると、docker run
と docker compose run
や docker exec
と docker compose exec
などのコマンドのコードを共通化できたとのこと。
4) Easier Update-and-Dependency Management with Compose Binaries
Python 製の Compose V1 ではできなかったバイナリの配布が Go で書き直されたことで V2 では可能になった。クロスコンパイルが容易なのも Go の強みだと改めて実感させられる。
5. Run Commands Without a Compose File
--project-name
は docker compose start/stop/down/exec
などを docker-compose.yaml
をカレントディレクトリに置いたり、プロジェクトのディレクトリに移動したりせずに docker compose
コマンドを使用できるようになった。
まとめ
Docker Compose V2 が GA されたのでアップデート内容を簡単にまとめてみた。
Cloud Integuration や Profiles など便利な機能については今後試してみようと思う。また、次に Docker Compose を利用する際は --project-name
オプションを使用する前提でプロジェクトのディレクトリ構成も再度見直して見てもいいかも知れない。
参考
![Announcing Compose V2 General Availability](https://www.docker.com/wp-content/uploads/2024/02/docker-default-meta-image-1110x583.png)
![Docker CLI Plugin とは](https://res.cloudinary.com/zenn/image/upload/s--9GuI6jlY--/c_fit%2Cg_north_west%2Cl_text:notosansjp-medium.otf_66:Docker%2520CLI%2520Plugin%2520%25E3%2581%25A8%25E3%2581%25AF%2Cw_1010%2Cx_90%2Cy_100/g_south_west%2Cl_text:notosansjp-medium.otf_37:kagamirror%2Cx_203%2Cy_121/g_south_west%2Ch_90%2Cl_fetch:aHR0cHM6Ly9saDMuZ29vZ2xldXNlcmNvbnRlbnQuY29tL2EtL0FPaDE0R2l1dzRRbDlKTEpkX0JhUkJ5c2VOUldNd2FvbW1fZ3JHbThxbTNlPXMyNTAtYw==%2Cr_max%2Cw_90%2Cx_87%2Cy_95/v1627283836/default/og-base-w1200-v2.png)
![新しい docker compose](https://res.cloudinary.com/zenn/image/upload/s--PHA88ZBb--/c_fit%2Cg_north_west%2Cl_text:notosansjp-medium.otf_66:%25E6%2596%25B0%25E3%2581%2597%25E3%2581%2584%2520docker%2520compose%2Cw_1010%2Cx_90%2Cy_100/g_south_west%2Cl_text:notosansjp-medium.otf_37:%25E3%2582%25B4%25E3%2583%25AA%25E3%2583%25A9%2540%25E5%25AE%258C%25E5%2585%25A8%25E9%2580%25B1%25E4%25BC%25917%25E6%2597%25A5%25E3%2581%25AE%25E4%25BB%2595%25E4%25BA%258B%25E3%2581%258F%25E3%2581%25A0%25E3%2581%2595%25E3%2581%2584%2Cx_203%2Cy_121/g_south_west%2Ch_90%2Cl_fetch:aHR0cHM6Ly9zdG9yYWdlLmdvb2dsZWFwaXMuY29tL3plbm4tdXNlci11cGxvYWQvYXZhdGFyLzdlNGE3Zjg2ODIuanBlZw==%2Cr_max%2Cw_90%2Cx_87%2Cy_95/v1627283836/default/og-base-w1200-v2.png)