# Docker／コンテナ — アプリを箱ごと運んで どこでも同じに動かす

> レベル: 初級 ／ 対象: 大人
> 出典: Kotowary — https://kotowary.com/learn/units/docker?level=beginner&audience=adult
「自分のPCでは動くのに、本番サーバでは動かない」——この定番のつまずきを無くす道具が **コンテナ**、そしてそれを扱う代表的な仕組みが **Docker** です。

## これは何をする係？

コンテナは、アプリ本体と、それが動くのに必要な**環境**（※1 ライブラリなどの部品）を、まとめて**1つの箱**に詰める仕組みです。

引っ越しにたとえると、家具を1つずつ運ぶのではなく、**中身ごと箱に詰めて そのまま運ぶ**イメージ。箱の中は行き先が変わっても同じなので、**どこでも同じように動きます**。

Docker はこの箱を作ったり動かしたりするための、いちばん有名な道具です。

**登場人物メモ**:

- **※1 環境** — アプリが動くのに必要な部品一式（ライブラリ・設定など）
- **※2 カーネル** — OSの中核。ハードウェアとのやり取りを担う土台の部分

## 仕事の流れ

1. アプリと必要な環境を**箱に詰める**（設計図を書く）
2. 箱をそのまま**別の場所へ運ぶ**（開発PC → 本番サーバなど）
3. どこでも**同じ状態で起動**する
4. 要らなくなったら**箱ごと捨てる**（後片付けが簡単）

## VMとの違い

同じ「隔離して動かす」でも、**仮想マシン（VM）** はゲストOSを丸ごと積むため重くなります。コンテナは OSの中核（※2 カーネル）を土台と**共有**し、上にアプリと必要な部品だけを載せるので、**軽くて起動も速い**のが特長です。

::diagram{name="container-vm"}

## ⚠️ うまくいかないとき

- **箱に入れ忘れ** — 必要な部品を詰め忘れると、別の場所で動かない
- **データが消える** — 箱を捨てると中のデータも消える（保存先は別に分ける必要がある）
- **軽い＝万能ではない** — カーネルを共有するため、土台と大きく違う環境向けには不向きなこともある
