ベースイメージとは?あらゆる build の土台
ベースイメージは Dockerfile が FROM で始める対象です - その上にすべてが積み重なる土台の layer です。
すべてのイメージは別のイメージの上に構築され、最小限のルートまで遡ります。FROM で指定するイメージがベースイメージです。それは起点となる OS、利用可能なツール、攻撃対象領域、サイズを決定します - したがって適切なものを選ぶことは Dockerfile における最も重大な決定の一つです。
ベースイメージの選び方
必要なものをすでに備えたベースを選びます: 言語ランタイム(python:3.12)、slim な OS(debian:bookworm-slim)、あるいはバイナリだけ(scratch)。ベースが実際のニーズに近いほど、結果はより小さく安全になります。
slim、full、scratch
- full イメージ(例:
node:20)は build ツールを含む - 便利だが大きい。 - slim イメージ(
node:20-slim)は余分なものを削ぎ落とし、より小さいフットプリントに。 - Alpine イメージは非常に小さいが musl libc を使うため、一部のバイナリを驚かせることがある。
- scratch は空 - OS がまったく不要な静的バイナリに最適。
小さいベース、小さい攻撃対象領域
小さいベースはパッケージが少ないことを意味し、それは修正すべき CVE が少なく、攻撃対象領域が小さいことを意味します。pull と起動も高速になります。代償は利便性で、あると思い込んでいたツールを追加する必要があるかもしれません。
ベースイメージを pin する
むき出しの latest は避けましょう。特定のタグ、できれば digest を pin することで、build を再現可能にし、予期しない upstream の変更がイメージを黙って壊したり改変したりできないようにします。
CI におけるベースイメージ
イメージをビルドするすべての job がベースを pull するため、それをキャッシュすることは繰り返し報われます。マネージド runner は人気のベース layer を温かく保つため、FROM は build ごとの冷たい pull ではなくキャッシュから解決されます。
重要なポイント
- ベースイメージは Dockerfile が FROM で始める対象です。
- 小さいベースは脆弱性の減少、サイズの縮小、より高速な pull を意味します。
- 再現可能な build のために、ベースをタグまたは digest で pin しましょう。
関連ガイド
What Is a Dockerfile? The Recipe for Building an ImageA Dockerfile is a text recipe of instructions that builds a Docker image. Learn the key instructions, layerin…
What Is a Distroless Image? Containers Without an OSA distroless image contains your app and runtime but no shell or package manager. Learn what is stripped out…
What Is a Multi-Stage Build? Smaller Images, Cleaner OutputA multi-stage build uses several FROM stages so build tools stay out of the final image. Learn how it works,…