Dockerを正直よくわかってないあなたへ:実体は“ただのプロセス”です
これまで 「Docker = 軽量VMみたいなもの」 と誤解していた時期が長く、
コンテナが落ちる・systemctlが動かない・volumeが挙動不審…
そんな“モヤモヤ”を抱え続けていました。
しかしある日、
「Dockerはただのプロセス」
と理解した瞬間に世界が一変しました。
この記事では、Dockerの正体=プロセス隔離(namespace)を初心者でも腹落ちする形で解説します。
あなたはこんな疑問ありませんか?
- コンテナってOSが入ってるの?
- systemctl が使えないのはなぜ?
- コンテナはどこで動いてるの?
- volume と bind mount の違いが曖昧
- PID がホストとリンクして見えるのはなぜ?
- コンテナ間通信は“仮想LAN”なの?
この記事でここが全部わかります。
#1 Dockerの正体:プロセスに“別の世界”を見せているだけ
Dockerは「軽量VM」ではありません。
1つのプロセスに対して、namespace/cgroup で“別の世界”を作っているだけです。
▼ 図:Docker と VM の違い(比較図)
ポイント:
- VM → OSごと仮想化(重い)
- Docker → プロセスを隔離(軽い)
#2 コンテナが“別世界”に見える仕組み:namespace の力
Dockerでls /するとホストとは内容が違います。
しかし実体は 同じカーネル上で動くただのプロセス。
namespace が
「お前の世界の / はこれだよ」
と渡しているだけ。
▼ 図:namespace が作る“別世界”
#3 systemctl が動かない理由
よく初心者が困るやつ。
原因:
systemd は PID=1 の特権を前提に動くため、Docker環境では役割が違う。
コンテナは基本的に “1プロセス実行モデル” で設計されているので systemd が必要ない。
実務での正しい理解
- コンテナ = アプリ1つ
- サービス群をまとめたい → docker compose
- 複数プロセス動かす → Supervisor などを使う(非推奨)
#4 volume と bind mount の違い(最も誤解される場所)
▼ 表で簡単に理解
| 種類 | どこにある? | バックアップ性 | 移植性 | 使いどころ |
|---|---|---|---|---|
| volume | Docker管理領域 | 良い | 良い | データベースなど |
| bind mount | ホストの指定パス | 普通 | ホスト依存 | ローカル開発 |
▼ 図:bind mount と volume
#5 コンテナネットワークの正体(3層構造)
初心者が最も苦手なポイント。
Dockerネットワークはたったこれだけ:
- コンテナ内部の eth0
- Docker が作る仮想ブリッジ(docker0)
- NATで外へ出す
#6 実務で使える Docker の“本当のTips”(ベテラン向け)
✔ namespaceを手動で作る(3行)
unshare --pid --fork --mount-proc bash
✔ ホストからコンテナ内部に入る最強コマンド
nsenter --target <PID> --mount --uts --ipc --net --pid
✔ cgroup v2 で CPU を制御する例
echo 200000 > /sys/fs/cgroup/mycg/cpu.max # 20%制限
これらを理解すると、Dockerが“ただのプロセス”であることがより実感できます。
#7 まとめ:DockerはOSじゃない。プロセスだ。
この記事で押さえてほしいのはたった1つ:
Docker = 実体は1プロセス。namespace が「別の世界」を演出しているだけ。
これだけ理解していれば、
systemctl も PID の見え方も volume もすべて一本でつながります。
🙏 CTA
もし理解が1pxでも深まったら、いいね、スタックを押してもらえると励みになります!