Dockerイメージを小さくするための3つの簡単な方法
3 simple tricks for smaller Docker images – Skills Matter – Medium
の記事です。
オライリーニュースレターで紹介されてました。
面白かった。
まず、ちょっとnodeの勉強になった。npmってこう使うんだ。へーw
で、"multi-stage Docker build" へー。へー。
1. レイヤをまとめると少し小さくできる
まず、マルチステージを使って、複数レイヤを1つにまとめることで、Dockerイメージのサイズを少し小さくできる。
2. distrolessを使って不要なレイヤを省く
GitHub - GoogleContainerTools/distroless: 🥑 Language focused docker images, minus the operating system.
!!!! これはいいじゃん。
へー。ふむふむ。ビルドは node:8 を使って普通にやって、
マルチステージの2つ目で、ベースを
gcr.io/distroless/nodejs
にする、って方法なのか。
上記Googleのgithubには、
gcr.io/distroless/nodejs
は'experimental'て書いてるけど、
gcr.io/distroless/base
gcr.io/distroless/java
gcr.io/distroless/cc
はそうじゃないらしいぞ!それはすごい。
OSが全然ないので、sshしてbashとか走らせられないけど、裏を返せば、クラッカーも自由が効かなくて悪さしにくい、ってメリットもあると。
In other words, fewer binaries mean smaller sizes and increased security.
まぁ本番コンテナではデバッグとかあんましないはずだしね、とも。
Alpineでより小さなイメージ
コンテナに入りたければ、んじゃ、Alpineはどうよ、ってことで、Alpineの紹介に続いてます。 Alpineは、より小さいけど、glibcじゃなくてmuslcなので、互換性に問題でるかもよ、と。Alpineでビルドしたものがglibcで走らないとか。
あなたにはどのベースイメージが向いてる?
んで、この記事の結論パート。
- If you’re running in production and you’re concerned about security, perhaps distroless images are more appropriate.
- If you’re concerned about size at all costs, then you should switch to Alpine-based images.
- The vanilla base image is perfect for testing and development.
感想
なるほどなるほど。 いやぁ面白かった。
さて、僕は、実際の仕事で使うチャンスあるかな?