LoginSignup
0
0

docker compose 1.x もプラグインとして扱いたい

Posted at

非常にピンポイントなネタです。
現代では 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 のプラグインは簡単なメタデータを書いてあげれば出来上がりです。書いてみたのがこれ。

~/.docker/cli-plugins/docker-compose
#! /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を迎えているのでそろそろパッケージがアップデートされるかもしれませんね。

0
0
0

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
0
0