Docker Composeをcli管理ツールとして利用すると便利かも!
プロジェクトに必要な、いい感じのcliツールを探してると、たまーにこんな悩みがありませんか?
ケース1
(^o^) < このcliツール便利そうなのだ、プロジェクトに導入するのだ
(^o^) < このツール実行するためにjavaが必要なのだ?うちのプロジェクトjavascriptしか使ってないのにいちいちjava入れるのだるいのだ・・・
(^o^) < でもまぁ・・・
(^o^) < javaもjavascriptの名前ほとんど一緒だしそんな苦労しないのだ!
(^o^)...
(^o^).......
\(^o^)/
ケース2
(^o^) < このcliツール便利そうなのだ、プロジェクトに導入するのだ
(^o^) < このツールbrewでしか配られてないのだ?
(^o^) < でも社員はみんなmacで開発してないから関係ないのだ!いれるのだ!
( ̄个 ̄) < うちもうmac買う金ねぇから次新しく社員入ったらwindows pcね
(🔰^o^🔰) < 先輩!このツールaptじゃ入らねぇっす!
(^o^)...
(^o^).......
\(^o^)/
まぁ、ぶっちゃけdocker使えば解決する話です。何かしらのスクリプトファイルの中で docker run すればいい感じに動くようになります。
ただ、それだけだといちいちdocker runのコマンドラインオプションの中でvolumeのつなぎ込みのオプションだったりネットワークの接続情報だったりを書かないといけません。なので、簡単なcomposeファイルを一個おいて、ここでdocker imageの管理をしてみるとラッパースクリプトに書く内容が激減して管理しやすくなるんじゃね?と思いました。
で、サンプルリポジトリ作ってみました!
中のファイルを覗いてみましょう
---
version: "3.7"
services:
# hadolint not distributed apt😢
hadolint:
image: hadolint/hadolint:latest-alpine
# openapi-generator-cli needs Java😢
openapi-generator:
image: openapitools/openapi-generator-cli:latest
volumes:
- .:/local
working_dir: /local
# curl can connect to compose.yml echo server😆
curl:
image: curlimages/curl:latest
tty: true
networks:
- my_server
networks:
my_server:
external: true
こういったcliツールをcomposeファイルに一括で管理すればdependabotやrenovateでも簡単にバージョン管理ができるし、volumeなどの連携もまとめて管理できます。
あとは簡単なラッパースクリプトを書くだけです
#!/bin/bash
SCRIPT_DIR=$(
cd $(dirname $0)
pwd
)
# root dir
cd "$SCRIPT_DIR/.." || exit 1
docker compose -f compose-tool.yml run --rm -it openapi-generator "$@"
docker runで書こうとするとこのコマンドの中で色々オプションを書きまくらないと行けないので大変なんですよね。compose経由で実行するので最低限だけですみます
./tools/openapi-generator generate -i petstore.yml -g python -o generated
docker compose、色んなところで例に挙げられてるのが開発サーバ一式を立ち上げるのにしか使われてなかったので、cliツールの管理としてもつかえるんじゃね?という紹介でした!みなさんもdocker composeでcliツールの管理をしてみてください!
余談
dockerだとやだ!という人向けのおすすめのcli管理ツールとして僕の最近のイチオシはaquaというツールがあります。これが結構便利なので、こいつを導入するのも非常におすすめです!
作者のzenn記事
Discussion