Skip to content
Latchkey

ベースイメージとは?あらゆる 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 しましょう。

関連ガイド