先日はDocker meetupでLTをさせていただきましたが、そのLTのために作った小さなツールを紹介します。
ちなみにスライドはこちら。
https://speakerdeck.com/ymatsuwitter/docker-flow-at-gunosy
docker-assemblerとは
簡単にいうと複数のDockerfileを組み合わせて一つのDockerfileをビルドするためのツールです。
幾つものDockerfileを作っていると、例えばどのイメージにも似たようなパッケージ(nginxなりtd-agentなり)をインストールする場面に出くわします。
ChefやAnsibleなどであればレシピ単位などで分割することで再利用を測りますが、(自分の知る限り)現状のDockerfileではinclude構文が存在しません。
※一応議論としては存在するようです。
please add INCLUDE to dockerfile build so we can build more complex images #735
今回のツールはDockerfileのFROM部分をビルド時に上書きすることでとりあえず細かい単位でのビルドとそれを組み合わせたイメージを生成するものになります。
使い方
install
@deeeetさんのcli-initを利用していますのでとりあえずgo get
してください。
$ go get github.com/y-matsuwitter/docker-assembler
初期化
$ docker-assembler create <your project name>
これで指定した名前のディレクトリが生成されその中にビルドなどに用いる設定ファイルが設置されます。
Dockerfileの追加
$ cd <your project dir>
$ docker-assembler add <sub dockerfile name>
上記で指定した名前のディレクトリがプロジェクト内に生成され、Dockerfileの雛形が設置されます。
こちらは普段通りのDockerfileとして書いていただければ問題ありません。また、ADD
などで必要なファイル群はそのDockerfileと同じサブディレクトリ内に設置してください。
ビルド
$ cd <your project dir>
$ docker-assembler build <image name> <sub dockerfile names>...
上記で、指定したサブディレクトリ内のDockerfileを順次つなげてビルドし、image nameで指定したイメージが生成されます。
最後に
一晩で適当に作ったツールなので問題だらけかと思われます。
適宜Issueを発行してもらえれば改善いたしますのでよろしくお願い致します。