【こんてないめーじ】

コンテナイメージ とは?

💡 コンテナを生み出す『設計図兼材料キット』
📌 このページのポイント
書き込み可能レイヤー (コンテナ実行時) アプリコード 依存ライブラリ ランタイム(Node.js等) ベースOS(Ubuntu等) 読み取り 専用 書き込み可 ビルド 順序
コンテナイメージのレイヤー構造
ひよこ ひよこ

コンテナとコンテナイメージって何が違うの?同じものじゃないの?

ペンギン先生 ペンギン先生

いい質問だね。コンテナイメージは『たい焼きの型』で、コンテナは『焼き上がったたい焼き』だよ。型(イメージ)からたい焼き(コンテナ)をいくつでも作れるけど、型そのものは食べられないでしょ?

ひよこ ひよこ

なるほど!イメージからコンテナを作るんだね。イメージはどうやって作るの?

ペンギン先生 ペンギン先生

Dockerfileっていうレシピファイルを書くんだ。『ベースはNode.js 20の環境を使って、このフォルダにコードをコピーして、npm installして、ポート3000を開けて…』みたいに手順を書いて、docker buildするとイメージができあがるよ。

ひよこ ひよこ

レイヤー構造って聞いたけど、それは何?

ペンギン先生 ペンギン先生

Dockerfileの各命令がそれぞれ1つのレイヤーになるんだ。ベースOS層の上にNode.js層、その上にnpm install層…みたいに積み重なる。同じレイヤーキャッシュされるから、コードだけ変えたら最後のレイヤーだけ作り直せばよくて、ビルドが速くなるんだよ。

ひよこ ひよこ

コンテナイメージを小さくするコツってあるの?

ペンギン先生 ペンギン先生

マルチステージビルドが定番だよ。ビルド用のステージでコンパイルして、実行用のステージにはバイナリだけコピーする。ベースイメージもubuntuよりalpine(5MB程度)やdistroless(Google製の最小イメージ)を使うとサイズが劇的に小さくなるよ。実は「.dockerignore」でnode_modulesや.gitを除外するのも重要で、ビルドコンテキストが大きいとビルド自体が遅くなるんだ。イメージサイズが小さいほどpull/pushが速く、セキュリティリスク(含まれるパッケージの脆弱性)も減るから、本番では徹底的に削るのが鉄則だよ。

ペンギン
まとめ:ざっくりこれだけ覚えればOK!
コンテナイメージは、コンテナを作成するための読み取り専用テンプレートです。Dockerfileからビルドされ、アプリケーションの実行に必要なすべてを含みます。レイヤー構造により効率的に管理され、コンテナレジストリを通じて共有・配布されます。
📖 おまけ:英語の意味
「Container Image」 = コンテナの像、コンテナの写し
💬 image(像・イメージ)は、実行環境の完全なスナップショットという意味で使われる。ISOイメージと同じ発想
← 用語集にもどる