ソースからビルドしなければならないパッケージがある時は、先にビルド用のコンパイラやXXX-dev系のパッケージを入れなければならない。しかしこれらをインストールしたままにするとイメージサイズが肥大化し、せっかくalpineで軽量イメージを作る意味があまりなくなってしまう。
だからビルド時にのみ必要なツールはビルド後に削除したい。それをやりやすくするコマンドが用意されている。
基本的には、Alpine Linux で軽量な Docker イメージを作るを参考にして書く。要点は
RUN apk --no-cache --virtual .build-deps build-base xxxx yyyy zzzz && \
色々ビルドする && \
apk del --purge .build-deps
と書けば良い。これで、build-base xxxx yyyy zzzz
を全てビルド後に削除してくれる。--purge
をつけているから一緒にインストールされた関連パッケージも削除される。
apk update
がいらなくなってapk --no-cache
で良い、と書かれていたところの意味がわからなかったからもう少し調べると、
Alpine Dockerfile Advantages of –no-cache Vs. rm /var/cache/apk/*というstackoverflowの質問を見つけた。
回答に、
The –no-cache option allows to not cache the index locally, which is useful for keeping containers small.
Literally it equals apk update in the beginning and rm -rf /var/cache/apk/* in the end.
と書いてあった。これでようやく意味がわかった。