【こんてないめーじ】

コンテナイメージ とは?

最終更新:
💡 コンテナを生み出す『設計図兼材料キット』
📌 このページのポイント
書き込み可能レイヤー (コンテナ実行時) アプリコード 依存ライブラリ ランタイム(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!
「コンテナイメージ」って出てきたら「コンテナを起動するための設計図・テンプレート」と思えればだいたいOK!
📖 おまけ:英語の意味
「Container Image」 = コンテナの像、コンテナの写し
💬 image(像・イメージ)は、実行環境の完全なスナップショットという意味で使われる。ISOイメージと同じ発想
← 用語集にもどる