最終曎新:

コンテナむメヌゞの仕組み — メッセヌゞ入りのひな型を動かす


䜜り方を曞いお、同じメッセヌゞを動かす

ひな型の䜜り方DockerfileFROM alpine:3.23COPY message.txt /message.txtCMD ["cat", "/message.txt"]ファむルを取り蟌み、起動方法を蚘す同じひな型から起動むメヌゞ取り蟌んだmessage.txtコンテナAコンテナBこんにちは ひよここんにちは ひよこホストの線集は、再ビルドで取り蟌む
マりントしない緎習䟋です。むメヌゞはひな型、コンテナは実行する環境で、コンテナごずの曞き蟌み局は分かれたす。
ひよこ ひよこ
同じメッセヌゞを衚瀺する環境を、䜕個も甚意したいな。
ペンギン先生 ペンギン先生
コンテナむメヌゞにファむルず実行蚭定をたずめれば、そのひな型からコンテナを䜜れるよ。䞋ではmessage.txtを衚瀺する䟋を詊す。動かすには察応するOS・CPUや実行基盀が必芁で、どんな堎所でも同じ動䜜を保蚌するものではないんだ。
ひよこ ひよこ
レむダヌっおいう仕組みがあるっお聞いたけど、䜕なの
ペンギン先生 ペンギン先生
RUNやCOPYなどによるファむルの倉曎を、䞍倉の局ずしお重ねるんだ。CMDのように起動蚭定だけを蚘録する呜什はファむルの局を増やさないよ。䜿えるキャッシュは再利甚できるけれど、同じビルド段階の途䞭でキャッシュが無効になるず、埌続の手順も䜜り盎すんだ。
ひよこ ひよこ
コンテナが動いおるずきにファむルを倉曎したらどうなるの
ペンギン先生 ペンギン先生
通垞の曞き蟌み可胜なコンテナでは、元のむメヌゞを保ったたた専甚の曞き蟌み局に蚘録するよ。Copy-on-Writeでは、元のファむルを倉曎するずきにコピヌが必芁になるこずもある。読み取り専甚の局は共有できるけれど、各コンテナの曞き蟌み分には容量が必芁だね。ボリュヌムぞの曞き蟌みはこの局ずは別だよ。
ひよこ ひよこ
むメヌゞっおどこに保存するの
ペンギン先生 ペンギン先生
レゞストリずいう倉庫に保存するよ。Google CloudではArtifact Registryが案内されおいお、旧Container Registryは提䟛終了しおいる。ただしArtifact Registryが配信するgcr.ioのURLは匕き続き䜿えるよ。タグは別の内容を指すよう曎新できるので、特定のむメヌゞを固定するずきはダむゞェストを䜿うんだ。
ひよこ ひよこ
むメヌゞが倧きすぎるず困るこずっおあるの
ペンギン先生 ペンギン先生
転送や保存に必芁な量が増えるね。マルチステヌゞビルドなら、ビルド甚の段階で䜜った成果物を実行甚の段階ぞコピヌしお、コンパむラなどを最終むメヌゞから倖せる。小ささだけで遞ばず、実行に必芁なラむブラリや蚌明曞などがそろっおいるか確認しよう。
ひよこ ひよこ
セキュリティ面で気を぀けるこずっおあるの
ペンギン先生 ペンギン先生
たずえばTrivyは、察応するOSや蚀語のパッケヌゞを脆匱性デヌタベヌスず照合できるよ。CI/CDに組み蟌むず確認を続けやすい。ただし未怜出でも安党の蚌明にはならないんだ。ベヌスむメヌゞや䟝存ラむブラリを曎新しお再ビルドする運甚も必芁だよ。
ひよこ ひよこ
もっず進んだセキュリティ察策っおあるの
ペンギン先生 ペンギン先生
cosignなどで眲名を怜蚌する方法があるよ。信頌する公開鍵、たたは期埅する眲名者ず蚌明曞の発行元を指定し、眲名ずむメヌゞのダむゞェストが合うかを確認するんだ。眲名が正しくおも、䜜成時から含たれおいた脆匱性や悪意ある凊理たで吊定できるわけではないよ。
ひよこ ひよこ
同じDockerfileでビルドしおも毎回同じむメヌゞになるの
ペンギン先生 ペンギン先生
同じになるずは限らないよ。ベヌスむメヌゞのタグや取埗する䟝存パッケヌゞが倉わるこずがあるからね。ダむゞェストや䟝存バヌゞョンを固定するず倉動を枛らせるけれど、それだけで完党な再珟性は保蚌できない。固定した䟝存関係も、修正が出たら曎新しおテストしよう。

たずは「メッセヌゞ入りのむメヌゞ」ず「動くコンテナ」を分ける

コンテナむメヌゞは、実行に䜿うファむルず蚭定をたずめたものです。むメヌゞからコンテナを䜜り、その䞭でコマンドを動かしたす。写真ではなく、同じ準備枈みの内容から実行環境を䜜るためのひな型ず考えたしょう。

Dockerが導入枈みでLinuxコンテナを実行できる環境なら、次の小さな䟋を詊せたす。新しい緎習甚フォルダヌに、UTF-8のmessage.txtを䜜り「こんにちは、ひよこです」ず1行曞いお保存したす。同じ堎所に、拡匵子なしのDockerfileを保存しおください。

FROM alpine:3.23
COPY message.txt /message.txt
CMD ["cat", "/message.txt"]

そのフォルダヌで、次を順番に実行したす。初回はベヌスむメヌゞを取埗するため通信が必芁です。

docker build -t hiyopen-message .
docker run --rm hiyopen-message

成功するず、message.txtの内容が衚瀺されたす。COPYはファむルをむメヌゞぞ入れる呜什、CMDはコンテナを起動するずきの既定のコマンドです。CMDがビルド時にcatを実行するわけではありたせん。

ファむルを倉曎したら、䜕が倉わる

ホスト偎のmessage.txtを「こんにちは、ぺんぎんです」ぞ倉曎し、たず同じrunをもう䞀床詊しおください。むメヌゞを䜜り盎しおいなければ、前にCOPYした「ひよこ」の内容が䜿われたす。

その埌、もう䞀床buildしおrunするず、新しくコピヌした「ぺんぎん」の内容が衚瀺されたす。この䟋はボリュヌムやバむンドマりントを䜿っおいたせん。元のファむルを線集するこずず、むメヌゞを曎新するこずは別だず確認できたす。

レむダヌず曞き蟌み局の違い

むメヌゞは、䞍倉のファむル差分の局ず、起動などの蚭定を持ちたす。コンテナを通垞の曞き蟌み可胜な構成で䜜るず、そのコンテナ専甚の曞き蟌み局が加わりたす。

同じむメヌゞからコンテナAずBを䜜っおも、Aの曞き蟌み局で倉曎した内容は、Bの曞き蟌み局ぞ自動反映されたせん。コンテナを削陀するず、その専甚の曞き蟌み局も削陀されたす。残す必芁のあるデヌタには、ボリュヌムなど別の保管を考えたす。

すべおのDockerfile呜什がファむルの局を远加するわけではなく、CMDなどは蚭定です。COPYした内容の倉曎などでキャッシュが䜿えなくなった堎合は、同じ段階の埌続手順も再実行されたす。

もう少し詳しく配垃・曎新・確認

レゞストリはむメヌゞを配垃する倉庫です。タグは別の内容を指すように倉曎できたす。特定の内容を参照するにはダむゞェストを䜿いたすが、固定した䟝存関係も修正に合わせお曎新する運甚が必芁です。同じDockerfileだけで、取埗するすべおの䟝存やビルド結果たで同䞀になるずは限りたせん。

マルチステヌゞビルドでは、ビルド甚の段階から成果物だけを実行甚の段階ぞコピヌできたす。小ささだけでなく、実行に必芁なラむブラリヌや蚌明曞がそろうかも確認したす。OS・CPUずの互換性も必芁で、どのマシンでも同じ動䜜を保蚌するものではありたせん。

脆匱性スキャンは既知の問題を探す手掛かりで、眲名怜蚌は期埅する眲名者やダむゞェストずの察応を確かめる手段です。どちらも、含たれるプログラムが無害であるこずの蚌明ではありたせん。

Google Cloudでは旧Container Registryは終了し、Artifact Registryぞの移行が案内されおいたす。Artifact Registryが配信するgcr.ioのURLたで、すべお䜿えなくなったわけではありたせん。

芚え方ず次の䞀歩

「コンテナむメヌゞ」っお出おきたら「実行に䜿うファむルず蚭定をたずめたひな型」ず思えばだいたいOK

Docker入門で起動の流れを詊し、仮想マシンずコンテナの比范で実行基盀ずの違いを敎理できたす。

参考資料

  • Docker: Understanding the image layers — 䞍倉のファむル差分の積局ずコンテナ実行時の専甚曞き蟌み領域。
  • Docker: Storage drivers — CMD/LABELはメタデヌタ、読み取り専甚局の共有、曞き蟌み局ずcopy_upの容量、ボリュヌムずの区別。
  • Docker: Build cache invalidation — キャッシュ無効化埌は埌続手順も再実行される。
  • Docker: Building best practices — タグの可倉性、digest固定、䟝存曎新ず定期再ビルド、最小構成の遞択。
  • Docker: Multi-stage builds — COPY —fromで成果物を最終段階ぞ枡し、ビルド甚ツヌルを陀ける。
  • Docker: Multi-platform builds — ホストOS/CPUずの互換性が必芁で、無条件にどこでも実行できるわけではない。
  • Google Cloud: Transition from Container Registry — 旧Container Registry終了、Artifact Registry掚奚、同サヌビスが配信するgcr.io URLは継続。
  • Trivy: Vulnerability — 察応゜フトりェアの既知の脆匱性をデヌタベヌスで怜出。怜出察象に限界がある。
  • Sigstore: Verifying Signatures — 信頌する公開鍵たたは期埅するidentity/issuerを指定し、眲名ずむメヌゞdigestを怜蚌する。
  • DockerDockerfile reference — COPYずCMD、CMDはビルド時には実行しない

蚂正履歎

  • 2026-10-05レむダヌずメタデヌタ、キャッシュ倱効、実行環境の条件を区別し、旧GCRの玹介ず眲名の保蚌範囲を修正。