みんな使っているdocker hub(イメージのリポジトリ)。これは非常に便利で、Dockerfileをgithubに置いて連携させると、勝手にビルドが走る。設定したベースイメージの更新やgithubへのpush/mergeでトリガが走り、勝手にイメージをビルドしてくれるわけだ。最新に保てるし、automated buildの印がついてそこはかとない安心感を与えるし、とても良い。
ただ問題があって、ちょっと前(17.05あたり)からdockerにはmulti stage buildという機能が入ったんだけど、docker hubのイメージのビルドに使われているdockerが少し古くて(現在17.03.1-ee-2)、multi stage buildで書いたDockerfileを処理できないのだ。
multi stage buildというのは便利な機能で、例えばubuntuやcentosのイメージでビルドしたソフトウェアをalpineに持って行って小さいイメージで実行する、といったようなことが簡単にできるのです。これが来るまではalpineでビルドツールを入れる〜ビルドする〜ビルドツールを削除する、という一連の作業を一つのコマンドで実行しなければならなかった。multi stage buildはそういう煩わしさがないんですね。
まあalpineはlibcもglibcじゃないから単に持っていっただけだとダメなことがほとんどです。ライブラリも含めて根こそぎ持っていけばなんとかなるってケースも多い。
(追記) 2017-08-20
docker 17.06のEEが出てからちょっと経過したが、まだ17.03が使われている。この間、ずっと見ていたissueはこれ。
https://github.com/docker/hub-feedback/issues/1039
もうすぐだと思われる。あー待ち遠しい。
team is working on the upgrade for builders, please stay tuned.
(追記) 2017-08-21
ついにリリースされてmulti stage buildが使えるようになった!