🏗️

コンテナイメージ使うならdistrolessもいいよねという話

2022/06/18に公開

概要

  • distrolessは、Googleが提供している必要最小限の依存のみが含まれるDebian10(buster)を基に作成されたコンテナイメージです。

  • imageのサイズが本当に小さく、aptやshellさえも含まれておりません。

  • よくベースとして利用されるLinuxディストリビューションは、基本的な設定ファイルやパッケージが大体含まれます。(カーネルを除く)

  • なので、実際使用しないような不要なファイルが多数含まれているのが現状です。

  • distrolessは、このような不要なファイルを削除し、本当に必要な最小限のファイルのみを含んだimageとなっております。

https://github.com/GoogleContainerTools/distroless

何が嬉しいのか

上記にも挙げたのですが、嬉しさポイントは以下の2点です。

  • セキュア
    => 本当に実行に必要なのファイルのみを含んだimageとなっているので、不要なバグや脆弱性を埋め込みにくいという点が、セキュアだといえます。

  • 軽量
    => 含まれるファイルを最小限にしているので、imageのサイズを小さくできます。

distrolessのベースイメージ群

現在(2022/6/18時点)では、下記のベースイメージ群があります。

gcr.io/distroless/static-debian11
gcr.io/distroless/base-debian11
gcr.io/distroless/java11-debian11
gcr.io/distroless/java17-debian11
gcr.io/distroless/cc-debian11
gcr.io/distroless/nodejs-debian11

一応下記のベースイメージもあるのですが、実験的なものと見なされており、本番環境での使用はお勧めしていないようです。

gcr.io/distroless/python3-debian11

staticとbaseの違い

  • 詳しくは公式のREADMEに書いてあるんですが、違いとしてはStaticは最軽量なコンテナイメージです。サイズも3.42MBほどで、イメージを起動しても6.6MB程度のようです。じゃあbaseはというと、glibc,libssl, opensslなどを使いたい場合はbaseを選択するといった感じです。ただ、これらが入るとサイズが肥大化し、だいたい24MBぐらいになるようです。

https://github.com/GoogleContainerTools/distroless/blob/master/base/README.md

参考/引用

https://github.com/GoogleContainerTools/distroless

https://blog.inductor.me/entry/alpine-not-recommended

https://blog.unasuke.com/2021/practical-distroless/

https://ceblog.mediba.jp/post/662840014480326656/コンテナイメージとしてdistrolessを使うべき理由って

Discussion