初めに
業務でdockerファイルを軽量化する必要があり、その調査でまとめた情報を載せます。
時間がなかったのでかなり殴り書きのようなメモですが、同じ悩みを持った人の助けになればと思います。
私自身、dockerの経験が薄くコンテナの初回のような情報も載せてあります。
時間ができたら、整理して再度記事にしようと思ってます。
調査資料
docker軽量化 記事 資料
おまえのdockerファイルはまだ重い
https://speakerdeck.com/stormcat24/oqian-falsedockerimezihamadazhong-i?slide=15
↑スライドで視覚的にわかりやすい、どうして軽くしないといけないのかどんなものがいいのかのイメージが掴めやすい
dockerのイメージとコンテナの違い
https://and-engineer.com/articles/YaSPjRIAACAAkhMI
dockerイメージのレイヤの考え方
https://www.itbook.info/network/docker02.html
dockerコンテナイメージを軽くする理由
・ポータビリティが向上する
・ノード障害等でコンテナが別ノードに移動する際により早く起動できる
・これらは、サービスの復旧の速度を早めることにつながる
https://blog.mosuke.tech/entry/2020/07/09/container-image-size/
dockerファイル公式git
libから現場の公式発表dockerコードが見れる
https://github.com/docker-library/official-images
大体以下の三つに絞れる
・Alpine Linux
・Ubuntu
・Debian
厳しい
・CentOS
理由:
モジュールが揃いすぎている=dockerのイメージとしては重くなってしまう
とにかく軽い運用を目指すならAlpine Linux
安定的な運用を目指すならUbuntuかDebian
Alpine Linux
軽量重視で作られたLinux ディストリビューション イメージのサイズがとにかく小さい
しかし、Pythonなど一部の言語で速度が遅くなる可能性がある
理由:libcに一般的な互換性が不足している
https://superuser.com/questions/1219609/why-is-the-alpine-docker-image-over-50-slower-than-the-ubuntu-image
Debian Slim
タグの説明
https://www.ted027.com/post/docker-debian-difference/
↑これにどの時どのタグを使った方がいいのかの情報が記載されている
https://prograshi.com/platform/docker/docker-image-tags-difference/
Distroless
GoogleがメンテしているDockerのベースイメージ群
カンファレンス
https://swampup2017.sched.com/
README
https://github.com/GoogleContainerTools/distroless/blob/main/base/README.md
sysdigにも評価されている
https://sysdig.jp/blog/dockerfile-best-practices-2/
shellもパッケージマネージャーもない=セキュリティとしては強くなる
https://ceblog.mediba.jp/post/662840014480326656/コンテナイメージとしてdistrolessを使うべき理由って/amp
参考資料
Dockerイメージを軽量化する
https://qiita.com/gorohash/items/2358b4b9e0c708e510d0
Dockerfileのアンチパターンと軽量化方法
https://qiita.com/takky/items/401344672a803469b896
dockerイメージの軽量化
https://qiita.com/ytanaka3/items/8c308db2ee58ea63626a
社内のdockerfileのベストプラクティスを公開します(Forcia)
https://www.forcia.com/blog/002273.html
dockerでRunをまとめた方がいいとは限らない
https://future-architect.github.io/articles/20210121/
docker-slimについて
コンテナの最適化ツール?
機能 特徴
・静的および動的解析による最適化
・最適化後にDockerFileを自動作成
・Go製のDocker Container Imageサイズ圧縮自動化ツール
・静的(Dockerfile)及び動的(各レイヤーでのプロセスの起動情報など)な解析による最適化
・ダイエットしたImageだけではなくDockerfileも作成してくれる(リバースエンジニアリング)
・デモではnode.jsのイメージが431.7MBから14.22MB(約97%削減!)
https://junchang1031.hatenablog.com/entry/2016/02/11/171449
https://hawksnowlog.blogspot.com/2019/12/getting-started-with-docker-slim.html?m=0
GitHub
https://github.com/docker-slim/docker-slim
https://dockersl.im/
https://scrapbox.io/kimihiro-n/DockerSlim_%E4%BD%BF%E3%81%A3%E3%81%A6%E3%81%BF%E3%81%9F