それマグで!

知識はカップより、マグでゆっくり頂きます。 takuya_1stのブログ

習慣に早くから配慮した者は、 おそらく人生の実りも大きい。

docker-composeの管理が面倒なのでerb と makefileにした

docker-compose.yml が面倒くさい。

docker-compose は良く出来てるんだけど、環境変数だとか環境設定がめんどくさくないですか?

dockerfile から docker-compose.yml に進化して相当使いやすくなってるのはわかるんですね。

でも不便なものは不便。

コメントとか変数とか書きたい。

yml syntax チェックとかかしたい。

erb で変換することにしたら楽だった。

$ erb docker-compose.erb.yml | ruby -ryaml -e 'puts YAML.dump(YAML.load(ARGF.read()))' > docker-compose.yml

erb 変換して、その結果をrubyYAML に流し込んで整形することにした。 結構複雑なコメントとか書けるようになって嬉しかった。

makefile も併せて作った。

  • erb → yml に変換する
  • yml → docker 起動

この辺のワークフローをmakefile で作った。

name=php-apache-mysql
registry=takuya.registory.example.com/takuya/docker/$(name)

conf=docker-compose.yml
project-name=my$(name)
compose=docker-compose
cmd=$(compose) -f $(conf) --project-name $(project-name)

docker-compose.yml: docker-compose.erb.yml
    erb docker-compose.erb.yml | ruby -ryaml -e 'puts YAML.dump(YAML.load(ARGF.read()))' > $(conf)


.PHONY: all build run up down registory push clean

all: build

build:  docker-compose.yml
    $(cmd) build
run: build
    $(cmd) up
up: build
    $(cmd) up -d
down:
    $(cmd) down
kill-all:
    $(cmd) down

registry:
    @docker build -t $(registry) .
push: registry
    @docker push $(registry)
clean:
    -rm $(conf)

makefile 楽だわ。

gulp とかこういうビルドシステムは数あるけど、シンプルにやりたいことがぱぱっと出来るので 古き良きツールもまだまだ見捨てたらかわいそうだなって思った的な。