Docker
を使って開発環境を作ると、手軽に自動化できて便利なのだが、 Docker
コマンドをいちいち発行するのが面倒になる。
例)
-
php artisan serve
=>docker-compose exec web php artisan serve
-
rails s
=>docker-compose exec web rails s
alias dc='docker-compose'
としても、まだ長い。
そこで、 Docker
を使っているプロジェクトについては、下記の様な構成にした。
project-root/
|-- bin
| |-- composer
| |-- gulp
| |-- node
| |-- npm
| |-- php
| `-- yarn
|-- docker
| |-- nodejs
| `-- web
|-- artisan
|-- composer.json
|-- composer.lock
|-- docker-compose.yml
|-- gulpfile.js
|-- package.json
|-- phpunit.xml
`-- yarn.lock
bin/
配下のスクリプトはこんな感じ
もちろん chmod +x bin/*
をしている。
bin/composer
#!/bin/bash
set -eux
if docker-compose ps | grep web_ | grep -q Up; then
docker-compose exec web composer $@
else
docker-compose run --rm web composer $@
fi
こうしておけば、 bin/php artisan serve
みたいにできる。
工夫点としては、コンテナの起動有無によって exec
と run
を使い分けているところ。
exec
の方がコンテナを起動しない分、コストが低い。