非常にピンポイントなネタです。
現代では Docker を使っていれば compose 2.x がプラグインとしてインストールされていると思います。
使用する際の書式はこのようになります。
$ docker compose version
Docker Compose version v2.24.5
ただ、全ての環境が compose 2.x に移行しているわけではなく、組込み系などは新しいバージョンが提供されてい場合もあります。例えば Synology のNASは Docker を使えますが、バージョンは 20.10.3。compose も 1.28.5 と少々古いものからアップデートされていません。
compose 1.x だと docker-compose コマンドを使うことになりますが、一部環境だけ違った書式というのは少し不便です。そこで、docker-compose コマンドもプラグイン化してしまいましょう。
docker-compose をプラグイン化する
Docker のプラグインは簡単なメタデータを書いてあげれば出来上がりです。書いてみたのがこれ。
#! /bin/sh
if [ "$1" = "docker-cli-plugin-metadata" ]; then
cat<<-EOF
{
"SchemaVersion": "0.1.0",
"Vendor": "Docker Inc.",
"Version": "1.28.5",
"ShortDescription": "Docker Compose"
}
EOF
exit
else
i=2
while [ $i -le $# ]
do
arg="$arg "$(eval echo \$$i)
i=$(($i + 1))
done
docker-compose $arg
fi
引数にdocker-cli-plugin-metadata
が渡されれば json を返します。各項目の値は適当に埋めておけば良いでしょう。それ以外のケースでは、docker の第一引数に compose と書いた場合には引数がそのまま渡されます。
つまり、
$ docker compose up -d
と書いた場合には
~/.docker/cli-plugins/docker-compose compose up -d
が呼び出されます。ですから、先頭の compose を docker-compose に置き換えて第2引数以降はそのまま引き継げば完了です。
動作確認
動作を見ていきましょう。
$ docker help
Usage: docker [OPTIONS] COMMAND
(中略)
Management Commands:
builder Manage builds
compose* Docker Compose (Docker Inc., 1.28.5)
config Manage Docker configs
docker のコマンドに compose が追加されます。*
が付いているのはプラグインです。先ほど書いた json からVendorとVersionが反映されています。
そして、
$ docker compose version
docker-compose version 1.28.5, build 24fb474e
docker-py version: 4.4.4
CPython version: 3.7.10
OpenSSL version: OpenSSL 1.1.0l 10 Sep 2019
compose の後ろに書いた引数は docker-compose に渡されているのでめでたくプラグインとして実行できるようになりました。
20.10は既にEOLを迎えているのでそろそろパッケージがアップデートされるかもしれませんね。