【仕組み解説】Dockerはどうやってコンテナを動かしているのか — 仮想化との違いも図解
制限は「機能がある」だけでは有効にならない
Dockerコンテナには既定でCPU・メモリの資源制限が設定されていません。cgroupsで制御できても、必要な上限は利用者が設定します。メモリの上限・スワップ・CPUの割当は別の設定で、超過時の終了やスロットリングを含めて検証してください。
再起動と削除ではデータの扱いが違う
| 操作・保存先 | データの考え方 |
|---|---|
| 同じコンテナを停止・再起動 | 書き込み層はそのコンテナに残る |
| コンテナを削除・作り直す | 元の書き込み層は引き継がれない |
| ボリュームやバインドマウント | コンテナとは別の保存先。ただし削除・誤操作への備えが必要 |
「コンテナを再起動すると必ず消える」でも「ボリュームならバックアップ不要」でもありません。保存先と復旧方法をセットで決めます。
この説明の対象
ここでは主にLinuxコンテナを説明しています。WindowsやmacOSでLinuxコンテナを動かす場合、VMのLinuxカーネルを共有します。ホストOSのカーネルをどの構成でも直接共有するわけではありません。CPUアーキテクチャの差についてはPodmanとDockerの比較も参考にしてください。
参考資料
確認日:2026年9月26日。
-
Docker Engine security — namespaceによる分離、cgroupsによるリソース制限、権限(capabilities)の制限、カーネルの脆弱性と組み合わさると分離が不完全になりうること。
-
Docker Storage drivers — ファイルシステムを変更する命令がレイヤーを作りLABELなどのメタデータ命令は作らないこと、書き込み用レイヤーはコンテナ削除後に残らないこと、Engine 29.0以降の新規インストールはcontainerdイメージストアが既定。
-
Understanding image layers — レイヤーは作成後に変更されず、再利用される。
-
Docker build cache — レイヤーが変わるとそれ以降のレイヤーも再ビルドされる。
-
Resource constraints(Docker Docs) — メモリ・CPUの制限とメモリ不足時のOOM。
-
Docker overview — Docker CLIとDocker Daemon(dockerd)の役割。
-
Virtual Machine Manager(Docker Desktop) — Docker Desktopではコンテナが動くLinux VMを使う。
-
containerd — イメージ転送・保存からコンテナの実行・監視までのライフサイクル管理、OCI Runtime Spec(runC)対応。
-
Open Container Initiative Overview — Runtime・Image・Distributionの3仕様。
-
Linux namespaces(7) — namespaceの種類(PID、Network、Mount、User、UTSなど)。
-
Container Runtimes(Kubernetes Docs) — CRI準拠のランタイム(containerd、CRI-Oなど)が必要で、dockershimは1.24以降に含まれない。
-
Docker: Storage:書き込み層とボリューム・マウントの独立性。