docker-compose.ymlをまとめて実行するpdrというコマンドを作った
課題
現在所属しているGMOペパボのあるサービスの開発環境が下記のような構成になっていました。
いくつかのリポジトリをまたいでサービスが構築されており、それぞれのリポジトリに docker-compose.yml
ファイルがあります。そしてそれらの docker-compose.yml
はネットワークを共有しており、相互にコンテナがアクセス可能な状態です。例えばDBサーバや、APIサーバを共用しているようなイメージですね。こういった構成を取るときに、RepoAのコンテナだけ再起動したいとか、コンテナの状態をみたいとか、または再作成したいというときにいちいちリポジトリのディレクトリに移動して、コマンドを実行するのが非常に面倒であったので、コマンドを一つ書くことにしました。類似実装のようなものもあるのですが、少々やりたいことに対して重い実装だったので自分でサクッと書いたパターンです。
pdrコマンドでできること
pdr up (-i) で対話的にdocker-compose upを実行(down,rm)
$ pdr up -i
このように打つと、pecoが内部で実行されて、定義ファイルに定義されたリポジトリを選択できるので、エンターを押すと、そのリポジトリで docker-compose up -d
が実行されます。これらの操作は down
, rm
コマンドも対応しています。
pdr psコマンドでコンテナの起動状況を確認
定義されているリポジトリに対して docker-compose ps
を発行して、一覧表示できます。
pdr loginコマンドで起動しているコンテナに対話的にログイン
よくpecoを利用して実行するようなオペレーションですが、 pdr login
と打つとpecoが起動して、起動しているコンテンを選択できるので選択すると /bin/bash
でログインします。また起動シェルはオプションで指定できます。
pdr logコマンドで起動しているコンテナのログを見る
これもloginコマンドと似ていますが、起動しているコンテナを対話的に選択し、ログを見ることができます。先述のloginコマンドと、logコマンドは定義ファイルを必要としないので、これだけでも便利かもしれません。
インストール方法
現状はOSXでのインストール方法のみ準備しています。
$ brew tap pyama86/homebrew-ptools
$ brew install pdr
定義ファイル
定義ファイルは ~/.pdr
に配置してください。
repos:
proxy:
path: /path/to/proxy
depends:
- api
api:
path: /path/to/api
depends:
- db
db:
path: /path/to/db
形式としては名前の下に、パスと依存関係がぶら下がる形式です。パスはdocker-compose.ymlが存在するパスを指定してください。 depends
は文字通り依存なのですが、例えば api
を起動する前に、 db
を起動したいならば上記のように api
の依存に db
を書いておくと、 api
の起動前に自動で db
を起動してくれます。
最後に
お察しかと思いますが、pdrは pyama docker revolution の略です。実装も小さく、似たような課題をお持ちの方がいればシュッと利用できると思うので是非試してみてください!