dockerでbuild用にpackageを追加するときはRUNコマンドを分けないほうがよさそう
About
ちょいネタです。言われてみれば当たり前っぽい。
経緯
fluentdのdocker imageのbuildに失敗するようになった
Building native extensions. This could take a while... ERROR: Error installing fluent-plugin-rewrite-tag-filter: ERROR: Failed to build gem native extension. current directory: /usr/lib/ruby/gems/2.3.0/gems/strptime-0.1.9/ext/strptime /usr/bin/ruby -r ./siteconf20171115-6-1m40knv.rb extconf.rb mkmf.rb can't find header files for ruby at /usr/lib/ruby/include/ruby.h extconf failed, exit code 1 Gem files will remain installed in /usr/lib/ruby/gems/2.3.0/gems/strptime-0.1.9 for inspection. Results logged to /usr/lib/ruby/gems/2.3.0/extensions/x86_64-linux/2.3.0/strptime-0.1.9/gem_make.out
こんな感じ
利用イメージ
- fluent/fluentd:v0.12.36
調査
どうやら2.0.0からnative extensionが必要になったので、ruby-devel(alpineではruby-dev)を導入した
FROM fluent/fluentd:v0.12.36 ... RUN apk add --no-cache --update --virtual=build-dependencies ruby-dev build-base RUN gem install fluent-plugin-rewrite-tag-filter
これで解決したんですがどうもimageがでかい。
$ docker images | grep fluentd fluent/fluentd v0.12.36 264400c89c14 4 months ago 36.3MB fluentd-diet-v1 latest 3204a9378e2f 46 seconds ago 221MB
インストール後にpackageをdeleteすればいいはずと思い、
FROM fluent/fluentd:v0.12.36 ... RUN apk add --no-cache --update --virtual=build-dependencies ruby-dev build-base RUN gem install fluent-plugin-rewrite-tag-filter RUN apk del build-dependencies && \ rm -rf /tmp/* /var/tmp/* /var/cache/apk/*
とすると
fluentd-diet-v1 latest 4cc29d40cfff 30 seconds ago 221MB
となっていてサイズが変わらない。
Rails on Dockerプロダクションイメージの容量削減をしてみた - Qiita
このあたりを見ていて気づいて
FROM fluent/fluentd:v0.12.36 ... RUN apk add --no-cache --update --virtual=build-dependencies ruby-dev build-base && \ gem install fluent-plugin-rewrite-tag-filter && \ apk del build-dependencies && \ rm -rf /tmp/* /var/tmp/* /var/cache/apk/*
とすると容量が削減できた。
fluentd-diet-v2 latest 290f2916aa18 33 minutes ago 64.6MB
よかったよかった。ちなみにfluentdがv.0.12系なのでfluent-plugin-rewrite-tag-filteをr1.5.6にバージョン指定することにした。