メインコンテンツまでスキップ

第41章:Dockerfileって何?(イメージのレシピ)🍳

この章は「Dockerfile=イメージを作るためのレシピ📖」って感覚を、手を動かしながらつかむ回だよ〜!😄🧑‍💻 (次章から FROM とか COPY とかを1つずつ深掘りするので、ここは“全体像”をつくるのが目的🎯)


1) Dockerfileの正体:レシピ📖 → イメージ🍱 → コンテナ🏠

ざっくり流れはこれだけ!👇😺

  • Dockerfile:手順書(どんな環境にして、何を入れて、どう起動する?)📝
  • イメージ:手順書どおりに作った“完成品”📦
  • コンテナ:完成品(イメージ)を起動した“実行中の箱”🚀

Dockerは Dockerfileを読んで自動でイメージを組み立てる 仕組みだよ〜。(Docker Documentation)


2) なんでDockerfileが必要なの?🤔💡

「動かすだけなら docker run node:... でもいいじゃん?」ってなるけど、実開発だとこうなる😅👇

  • 同じ手順を毎回再現したい(誰のPCでも同じにしたい)
  • 依存関係のインストールを自動化したいnpm i 手作業つらい)
  • 起動方法を固定したいnpm run dev を毎回打たない)
  • “配る”前提でまとめたい(将来の本番運用にもつながる)

つまり Dockerfile は、「面倒な儀式を、レシピに封印するやつ」 だね🧙‍♂️✨


3) 最小の全体像:Dockerfileでよく見る5つ👀✨

初心者はまずこれだけ覚えればOK!😆✅

  • FROM:土台を選ぶ(ベース)🏗️
  • WORKDIR:作業場所を決める🧭
  • COPY:必要なファイルを持ち込む📦
  • RUN:ビルド時に実行(インストールなど)📥
  • CMD:起動時に実行(コンテナが立ち上がるとき)▶️

RUN は“作るとき”、CMD は“起動するとき”」の感覚が超大事!🔥 この使い分け自体もDocker公式が整理して解説してるよ。(Docker)


4) ハンズオン:Dockerfileを“読む→作る→ビルドする”🛠️🐳

ここでは 理解優先のミニ題材 を作って、Dockerfileの流れを体験するよ😊✨ (Todo APIに入る前の“練習台”みたいなもの!)

4-1. ミニアプリを用意(1ファイル)📄✨

プロジェクト用フォルダを作って、server.js を置く👇

mkdir dockerfile-mini
cd dockerfile-mini

server.js を作成👇

// server.js
const http = require("http");

const port = process.env.PORT || 3000;

http.createServer((req, res) => {
res.writeHead(200, { "Content-Type": "text/plain; charset=utf-8" });
res.end("Hello from Dockerfile! 🐳✨\n");
}).listen(port, () => {
console.log(`Server running on port ${port}`);
});

4-2. Dockerfileを作る(最小レシピ)🍳

同じフォルダに ファイル名ぴったり Dockerfile で作成👇

## 1) 土台(Nodeの公式イメージ)を選ぶ
FROM node:lts

## 2) 作業ディレクトリ(コンテナ内)を決める
WORKDIR /app

## 3) アプリのファイルを入れる
COPY server.js .

## 4) 起動コマンド(コンテナ起動時に実行される)
CMD ["node", "server.js"]

ここで使ってる node:lts は「Nodeの公式イメージ」を使うやり方だよ〜。(Docker Hub) (公式イメージの考え方や、alpine みたいな派生がある話も公式Docsにまとまってる👍)(Docker Documentation)


4-3. ビルドしてイメージを作る🔨📦

docker build -t dockerfile-mini:1 .

ポイントは最後の . ! これは「このフォルダの中身を材料として渡すよ(ビルドコンテキスト)」って意味だよ😺


4-4. 起動してブラウザ確認🌐👀

docker run --rm -p 3000:3000 dockerfile-mini:1

ブラウザで http://localhost:3000 を開くと… Hello from Dockerfile! 🐳✨ が出たら勝ち〜!🏆🎉

止めるときはターミナルで Ctrl + C でOK👌


5) “今の自分”に必要な理解チェック✅🧠

✅ これ言えたら合格ライン🎓✨

  • Dockerfileは イメージを作るレシピ 📖
  • docker buildレシピからイメージを作る 🔨
  • docker runイメージからコンテナを起動する 🚀
  • RUN作るときCMD起動するとき ▶️

6) Windowsで詰まりがちな小ネタ🪟🪤(最小だけ)

🐢 ビルドやマウントが遅い…

開発プロジェクトは WSL側のファイルシステム に置くと速くなりやすいよ⚡ (Docker Desktop + WSLまわりのベストプラクティスは公式が更新してる)(Docker Documentation)


7) AI活用(Copilot / Codex)🤖✨:この章の“勝ちパターン”

7-1. Dockerfileの行ごと解説を作らせる📘

コピペ用プロンプト👇

このDockerfileを1行ずつ、初心者向けに「何をしてるか」を1行で説明して。
さらに「間違えやすいポイント」も3つ挙げて。

(Dockerfile)
FROM node:lts
WORKDIR /app
COPY server.js .
CMD ["node", "server.js"]

7-2. “このDockerfile、何が足りない?”を聞く🔍

このDockerfileを「学習用→実開発へ近づける」なら、次に何を足すべき?
優先度順に5つと理由を教えて。難しい用語には短い説明も付けて。

(次章以降で WORKDIR / COPY / RUN / .dockerignore を順番に強化していく流れがキレイになるよ😄)


8) ミニ問題(理解の定着)📝✨

Q1️⃣ Dockerfileは何のためのファイル?

A. (あなたの言葉でOK)🙂

Q2️⃣ RUNCMD の違いを一言で!

A. 🙂

Q3️⃣ docker build -t app:1 . の最後の . は何?

A. 🙂


9) まとめ🎉

Dockerfileは「環境づくり〜起動まで」をレシピ化して、 誰でも・いつでも・同じ結果にできるようにする魔法のメモ🪄✨

次の第42章からは、レシピの材料(FROM)をちゃんと選べるようにしていくよ〜!🏗️🐳🔥