tjinjin's blog

インフラ要素多めの個人メモ

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)を導入した

Can't install plugin that need native extension with Alpine based image · Issue #22 · fluent/fluentd-docker-image · GitHub

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にバージョン指定することにした。

GitHub - fluent/fluent-plugin-rewrite-tag-filter: Fluentd Output filter plugin to rewrite tags that matches specified attribute.