第48章:ビルド(build)とタグ運用(名前の付け方)🏷️
今日は 「イメージを作る(build)」→「ちゃんと名前を付けて管理する(tag)」 を、手を動かして身につける回だよ😆✨ (※2026-02-13 時点の Docker 最新ドキュメントを踏まえて構成してるよ📚)(Docker Documentation)
0) 今日のゴール🎯✨
この章が終わったら、次のことができれば勝ち🏆
docker buildで Todo API のイメージを作れる🐳-t(タグ)で dev/prod/release を名前で区別できる🏷️docker tagで 「付け替え」「別名追加」 ができる🔁:latest事故 を避ける“自分ルール”を作れる🚫😵
1) まずは超重要:タグって何?(1分でわかる)⏱️🧠
イメージの名前はこういう形👇
名前:タグ例:todo-api:dev/todo-api:prod/todo-api:0.1.0
タグはイメージに貼る “付箋” みたいなもの🏷️✨ 同じイメージに 複数のタグ を付けられるよ(別名を増やせる)🪄
じゃあ「完全に同じもの」を指す識別子は?🤔
それが digest(ダイジェスト)(sha256:...)だよ🔒
digest は内容のハッシュで、同じ内容なら同じ・違えば別物になるやつ💡
タグは付箋(変えられる)だけど、digest は指紋(ほぼ固定)って感じ👍
OCI の仕様でも、Tag と Digest は別物として定義されてるよ📘(https://opencontainers.github.io)
2) :latest の正体(ここで事故が減る)💣➡️🛟
よくある勘違い😇
- 「
:latestって “最新バージョン” でしょ?」 → 違うことが多い 😵💫
:latest は “そのレジストリに最後に push されたもの” ってだけで、
「最新版」や「安定版」を保証しないよ〜って Docker 側も注意してる🧯(Docker)
なのでこの教材では基本こうする👇
- ローカル用:
dev/prod(分かりやすさ重視) - リリース用:
0.1.0みたいに “具体的な番号” を付ける(再現性重視)
3) build の今どき事情:BuildKit が基本🧰⚡
Docker のビルドは今は BuildKit が標準になってて、Docker Desktop でもデフォルトだよ✨ (ビルドが速い・キャッシュが賢い・いろいろ便利)(Docker Documentation)
4) ハンズオン:dev と prod を “タグで” 管理する🏷️🧪
前章で Dockerfile を dev/prod のステージに分けたよね(ここを使うよ)🎭
ここからは「タグで迷子にならない」を体に覚えさせる💪😆
Step A:まずは基本の build(タグ付き)🏗️🏷️
プロジェクトのルート(Dockerfile がある場所)で👇
## dev 用イメージを作る(ステージ dev を選ぶ)
docker build -t todo-api:dev --target dev .
## prod 用イメージを作る(ステージ prod を選ぶ)
docker build -t todo-api:prod --target prod .
ポイント✅
- 最後の
.は ビルドコンテキスト(“このフォルダの中身を材料にする”)だよ📦 - `--targるか** を選ぶスイッチ🎛️
Step B:イメージ一覧で「名前が付いた!」を確認👀✨
docker image ls
todo-api が出てきて、dev と prod が付いてたらOK🎉
Step C:動かしてみる(タグで起動先が変わる)▶️🐳
## dev を起動(例:3000)
docker run --rm -p 3000:3000 todo-api:dev
## 別ターミナルで prod を起動して比較したいなら、ポートを変える(例:3001)
docker run --rm -p 3001:3000 todo-api:prod
todo-api:devとtodo-api:prodを 名前で選べるのが最高にえらい🏷️✨- これで「あれ?どっち動かしてるんだっけ?」事故が減る😆
5) “おすすめタグ設計” テンプレ(個人開発で強い)📏🧩
ここは超実戦的にいくよ💪🔥 Todo API なら、まずこの3段で十分✨
レベル1:ローカル運用(迷子防止)🧭
todo-api:devtodo-api:prod
レベル2:リリース運用(再現性)🔁
todo-api:0.1.0(SemVerっぽく具体的に)todo-api:0.1(大枠の互換ラインを指す用 ※任意)
レベル3:追跡用(いつのビルドか分かる)🕵️♂️
todo-api:git-abc1234(コミット短縮SHA)todo-api:2026-02-13(日付)
コツ💡
- 「人間が読めるタグ」+「戻せるタグ」=強い🏋️♂️
latestは“使ってもいいけど信用しない”くらいが安全🚫(Docker)
6) docker tag で「別名を増やす」練習🔁🏷️
たとえば、今の prod を「0.1.0」として固定したいなら👇
## 既存イメージに “別のタグ” を追加する(コピーじゃなくて同じものに別名)
docker tag todo-api:prod todo-api:0.1.0
確認👇
docker image ls todo-api
ここで大事な感覚😊✨
todo-api:prodとtodo-api:0.1.0が 同じ IMAGE ID を指してたら、 「同じ中身に付箋が2枚」状態だよ🏷️🏷️
7) digest を見て「同一性」を確認(ちょい上級だけど効く)🔒👀
「タグは変えられる」=「厳密には不安」って場面があるよね😵 そういう時は digest を見ると安心✨
docker image inspect todo-api:0.1.0
出力の中に RepoDigests とか sha256:... が見えるはず🔍
digest で参照すると “これそのもの” を指せる(強い)💪
digest の考え方は OCI/クラウドの解説でも「不変の識別子」として扱われてるよ📘(https://opencontainers.github.io)
8) ビルドが「反映されない😵」ときの対処3点セット🧯
① ベースイメージも新しくしたい
docker build --pull -t todo-api:prod --target prod .
② キャッシュ無視で作り直したい(最終手段)
docker build --no-cache -t todo-api:prod --target prod .
③ そもそも . を忘れてる(あるある)
## ❌ docker build -t todo-api:prod --target prod
## ✅ docker build -t todo-api:prod --target prod .
BuildKit はキャッシュが賢いぶん、「あえて更新したい」時だけスイッチを使うのがコツだよ⚡(Docker Documentation)
9) ちょい未来の話:マルチプラットフォーム🏗️🌍(知ってると得)
今どきは linux/amd64 と linux/arm64 を同時に作ることも多いよ〜ってやつ🐳
このへんは buildx が担当で、Docker 公式にも手順がある📘(Docker Documentation)
今日は深入りしないけど、将来「クラウド配布」するときに効いてくる💪✨
10) よくある事故あるある😇💥(先に潰す)
-
タグ付け忘れて、
latest扱いになって混乱😵 → 必ず-t todo-api:devみたいに付ける🏷️(Datadog インフラ & アプリ監視) -
devをprodだと思ってデプロイ準備し始める🎭➡️💣 → タグを役割名にする(dev/prod/release)だけで激減👍 -
**ビルド対象フォルダを間違える(コンテキスト違い)**📦😇 → Dockerfile のある場所で build する(
.は今いる場所)
11) AI活用(この章向け・即効プロンプト)🤖✨
-
タグ設計を作ってもらう🏷️
- 「Todo API の Docker イメージ用に、dev/prod/release のタグ命名規則を提案して。ロールバックしやすさ重視で!」
-
コマンドを短縮する🧪
- 「PowerShell 用に、dev/prod の build と run を 1発でできるコマンド集を作って(コメント付き)」
-
事故レビュー👀
- 「この
docker image lsの結果から、混乱の原因になりそうなタグ運用の問題点を3つ指摘して」
- 「この
12) ミニ問題(3分)🧠⏱️
todo-api:prodとtodo-api:0.1.0が 同じ IMAGE ID のとき、何が起きてる?🏷️:latestが “最新版” を保証しない理由を一言で言うと?😵💫docker build ... .の最後の.は何?📦
次(第49章)につながる一言🐢➡️🐇
タグ運用ができるようになると、次は自然に 「サイズと速度(重いを避ける)」 に進めるよ🔥 「タグで管理しつつ、イメージを軽くする」=めちゃ実務っぽくなる😆✨