概要
Dockerのイメージを選ぼうとしたら同じバージョンでも slim とか alpine とかが付いていて、どれを選べばいいかよくわからない。
そこで代表的なイメージの種類と選び方をまとめてみた。
主要なイメージの種類
※ nginxを例とする
公式
公式が配布している最新バージョン(latest)や安定バージョン(stable)、実験バージョン(mainline)、あるいは特定バージョンごとに配布。
主に開発環境や本番環境で問題が起きることを嫌う場合に使う。
例: nginx:lates nginx:stable nginx:1.28.2 nginx:mainline
メリット
- 開発に必要な一通りのパッケージが最初からそろっている。
- 依存関係や互換性の問題が起きにくい。
デメリット
- イメージのサイズが大きい
- コンテナのビルドや起動時間はそれなりにかかる
Slim
名前に slim がついたイメージで、使用頻度の低いパッケージ排除した計量版。
本番環境で容量削減や高速化などに主眼を置いて構築したい場合に使用する。
例: nginx:stable-alpine-slim nginx:1.28-alpine-slim
メリット
- 使用頻度の高いパッケージは一通りそろっている。
- 従来のイメージより軽量かつ高速
デメリット
- 依存関係の問題が発生しやすい
- 開発や調査に必要なツールが不足しているので、障害時の手間が多い。
Alpine
名前に alpine がついたイメージ。 AlpineLinuxをベースとした軽量イメージでとにかくリソースを節約したい場合に使用する。
例: nginx:stable-alpine-slim nginx:1.28-alpine-slim
メリット
- セキュリティを重視しつつ、必要最小限のパッケージのみ用意されている。
- 軽量・最小構成のためコンテナのビルドや起動時間が高速になる
デメリット
- 依存関係(特にglibc関連)の問題が起きやすい
- 開発や調査に必要なツールが不足しているので、障害時の手間が多い。
- 一部のパッケージやツールが使えない可能性がある
Debian系
ベースとなるディストリビューションがDebianのバージョン違いで用意されたイメージ。名前にそれぞれのバージョンのコードネームがついたイメージ。
新しいバージョンであるほどパッケージやツールのバージョンも新しく、セキュリティリスクも低い。また長期的なサポートが期待できる。
例: nginx:trixie nginx:stable-bookworm nginx:1.24.0-bullseye
| コードネーム | バージョン | 読み |
|---|---|---|
| trixie | v13 | トリクシー |
| bookworm | v12 | ブックワーム |
| bullseye | v11 | ブルズアイ |
選び方
- 開発や本番環境で安定性や信頼性を重視したい
- 依存関係や互換性の問題を避けたい
- セキュリティや品質が保証されたイメージを使いたい
- ドキュメントやサポートが充実している環境を求める
公式を選ぼう
- 本番環境で容量削減や高速化を重視したい
- 不要なパッケージを省いて、軽量なイメージを使いたい
- 必要最低限のツールやパッケージだけで十分な時
Slimを選ぼう
- とにかくリソースを節約したい
- 軽量・最小構成で高速なビルドや起動を求める
- セキュリティを重視し、必要最小限のパッケージだけで十分な時
Alpineを選ぼう
まとめ
ちゃんとした開発環境を整えたいなら公式版を選ぶのが無難。 ちょっと試したいぐらいならslimやaplineもあり。
本番環境ではケースバイケース。リソースと応相談。