docker-compose v2.0.0について

2021/10/04 v2.0.1でのバイナリー・ファイル名変更に合わせて記載内容を修正。
2021/10/01 v2.0.1が公開されて、docker-composeをv1と同じようにコマンドとしても、あるいはdockerのCLIプラグインとしても使えるようになりました。ところが、バイナリー名称が変更されていますからダウンロードの際には注意しましょう。
2021/09/30 インストール方法にシステムワイドを追記。docker-compose V2のドキュメントが公開されたこともあり、リンク情報を追加。


先ほどdocker-compose v2.0.0が公開されました。v2.0になってARM用のバイナリーも公開されていますから、Raspberry Piで使う場合にもバイナリーをそのまま使うことができます。これもMac M1の影響なのでしょうか。

ここで、大きく変更されているのがv1ではコマンドとして配布されていたのですが、v2の場合にはdockerのCLIプラグインとして配布されています。

一つの方法としては、$HOME/.docker/cli-pluginsディレクトリーに配置します。またシステムワイドにインストールする際には、以下のいずれかのディレクトリーに配置するものとされています。

・/usr/local/lib/docker/cli-plugins または /usr/local/libexec/docker/cli-plugins
・/usr/lib/docker/cli-plugins または /usr/libexec/docker/cli-plugins

Raspberry Pi OS、Ubuntu 20.04などでは/usr/libexec/docker/cli-pluginsディレクトリーにdocker-app、docker-buildxなどがインストールされていますので、docker-composeもこのディレクトリーにインストールすることにします。

参考: Compose V2 – Overview Docker公式ドキュメント
    Compose command compatibility with docker-compose Docker公式ドキュメント
    Where to get Docker Compose (github.com/docker/composeのREADME.mdから)

docker-composeのバイナリー

docker-compose v2.0.1では、次のようなバイナリーが公開されています。

docker-compose-darwin-aarch64
docker-compose-darwin-x86_64
docker-compose-linux-x86_64
docker-compose-linux-aarch64
docker-compose-linux-armv6
docker-compose-linux-armv7
docker-compose-linux-s390x
docker-compose-windows-x86_64.exe

そこで、例えばaarch64用のバイナリーであれば次のようにして入手してインストールすることができます。

$ mkdir $HOME/.docker/cli-plugins
$ cd $HOME/.docker/cli-plugins
$ curl -L https://github.com/docker/compose/releases/download/v2.0.1/docker-compose-linux-aarch64 -o docker-compose
$ chmod +x docker-compose

ここで、システムワイドに/usr/libexec/docker/cli-pluginsディレクトリーにインストールする場合には、次のようになります。

$ sudo curl -sL https://github.com/docker/compose/releases/download/v2.0.1/docker-compose-linux-aarch64 -o /usr/libexec/docker/cli-plugins/docker-compose
$ sudo +x /usr/libexec/docker/cli-plugins/docker-compose 

同時にv2.0.1でコマンドとしても使えるようになりましたので、次のようにシンボリックリンクを作成するようにしています。

$ sudo ln -sf /usr/libexec/docker/cli-plugins/docker-compose /usr/local/bin/docker-compose

これで、docker composeもdocker-composeも同じv2系が動作するようになります。

docker-composeのビルド

これまでのv1系と同様にビルドすることもできます。例えばRaspberry Pi上でv2.0.1をビルドするには次のようになります。

$ git clone https://github.com/docker/compose.git
$ cd compose
$ git checkout v2.0.1
$ make

ここで、ビルドした後のバイナリーがv1系のようにdistディレクトリーではなくbinディレクトリーに書き込まれています。さらに、ファイル名もdocker-composeとなっている点に注意が必要です。

docker-compose v2.0.1の使用

v2.0.1のdocker-composeは、dockerコマンドのCLIプラグインとしてまたはコマンドとして使用します。例えばdockerのCLIプラグインでは、次のようにしてバージョンを表示します。

$ docker compose version
Docker Compose version v2.0.1

ぱっと見は、”-“(ハイフン)があるかないかだけのようにも見えます。

従来のv1系では、次のようになっていました。

$ docker-compose --version
docker-compose version 1.29.2, build 5becea4c

dockerコンテナー名の変更

v2.0.1のdocker-composeで起動した場合にはコンテナー名の区切り文字が、v1での”_”(アンダースコア)ではなく”-“(ハイフン)に変更されています。例えば、次のようになります。

$ docker compose up -d
[+] Running 4/4
 ⠿ Network iroha_default       Created                                       0.1s
 ⠿ Volume "iroha_ccache-data"  Created                                       0.0s
 ⠿ Container iroha-postgres-1  Started                                       1.0s
 ⠿ Container iroha-node-1      Started                                       2.2s

ここではRaspberry Pi上でHyperledger Irohaを起動しているのですが、コンテナー名の区切り文字が “-“(ハイフン)になっています。

終了する場合も、次のようになっています。

$ docker compose down -v
[+] Running 4/4
 ⠿ Container iroha-node-1      Removed                                      10.4s
 ⠿ Container iroha-postgres-1  Removed                                       0.5s
 ⠿ Network iroha_default       Removed                                       0.1s
 ⠿ Volume iroha_ccache-data    Removed                                       0.0s

これが従来のv1として1.29.2では次のようになっていました。

$ docker-compose up -d
Creating network "iroha_default" with the default driver
Creating volume "iroha_ccache-data" with default driver
Creating iroha_postgres_1 ... done
Creating iroha_node_1     ... done

このようにコンテナー名の区切り文字としては、”_”(アンダースコア)が使われていました。

一応、終了する場合も次のようになっています。

 $ docker-compose down -v
Stopping iroha_node_1     ... done
Stopping iroha_postgres_1 ... done
Removing iroha_node_1     ... done
Removing iroha_postgres_1 ... done
Removing network iroha_default
Removing volume iroha_ccache-data

このため、Hyperledger Iroha v1.2.1でWSVとしてPostgreSQLを使う場合には、ホスト名としてコンテナー名を使用していたのですが、その設定を変更する必要があります。

この対応をどうしようかと考えていたのですが、docker-compose.ymlファイルでcontainer_name:を使って明示的にコンテナー名称を指定する方式に変更していこうと思っています。

ここで、先程の”–compatibility”オプションを使うことでコンテナー名の区切りも従来のように”_”(アンダースコア)が使われるようになります。この場合は、以下のように動作しています。

$ docker compose --compatibility up -d
[+] Running 4/4
 ⠿ Network iroha_default       Created                                       0.1s
 ⠿ Volume "iroha_ccache-data"  Created                                       0.0s
 ⠿ Container iroha_postgres_1  Started                                       1.1s
 ⠿ Container iroha_node_1      Started                                       2.3s
$ docker compose --compatibility down -v
[+] Running 4/4
 ⠿ Container iroha_node_1      Removed                                      11.4s
 ⠿ Container iroha_postgres_1  Removed                                       0.7s
 ⠿ Network iroha_default       Removed                                       0.1s
 ⠿ Volume iroha_ccache-data    Removed                                       0.0s

上記のように “–compatibility” をオプションとして付加することで従来のコンテナー名になっています。docker compose downで終了する場合には、”–compatibility”オプションをつけても付けなくても大丈夫なようです。

先程、公開されたものを動かしただけで正式なドキュメントなどの情報もこれから出てくるかと思いますが、色々と細かな対応が必要にはなりそうです。

この記事をシェアする
目次
閉じる