Dockerの仕組みをもう一段深く理解する(中盤)
中盤では Docker の「仕組み」をもう一段深く理解し、コンテナとイメージの関係を“頭の中で正しく描ける状態”になることが目的です。
コンテナは「軽量な仮想環境」だが、仮想マシンとは違う
Dockerコンテナは、ホストOSのカーネルを共有しながら独立した環境として動く点が特徴です。
これは、ゲストOSを丸ごと起動する仮想マシン(VirtualBoxやVMware)とは根本的に異なります。
コンテナは OS 全体を持たないため、起動が高速で、リソース消費が少ないという利点があります。
この仕組みは、Dockerが「軽い」「速い」と言われる理由の核心です。
イメージは「レイヤー構造」でできている
レイヤーとは何か
Dockerイメージは、複数のレイヤーが積み重なった構造になっています。
各レイヤーは Dockerfile の命令(FROM、COPY、RUN など)に対応し、読み取り専用です。
例えば nginx イメージを調べると、OS層 → 設定層 → 実行コマンド層…といった形でレイヤーが積み上がっています。
レイヤー構造のメリット
レイヤー構造のおかげで、
同じ部分は再利用され、変更された部分だけ新しいレイヤーとして追加されるため、
イメージのビルドが高速化し、ストレージの節約にもつながります。
これは Docker が「効率的に環境を配布できる」理由のひとつです。
イメージとコンテナの関係を正しく理解する
イメージ=静的な設計図
イメージは読み取り専用で、アプリを動かすために必要な OS・ライブラリ・設定が含まれています。
これは「実行されない状態のパッケージ」です。
コンテナ=イメージから作られた実行環境
docker run を実行すると、イメージを元に書き込み可能なコンテナレイヤーが追加され、実行プロセスが立ち上がることでコンテナが誕生します。
つまり、イメージは静的、コンテナは動的という関係です。
hello-world の裏側で何が起きているのか
1. イメージの取得
docker run hello-world を実行すると、Dockerはまず Docker Hub から hello-world イメージを取得します。
(ローカルにない場合のみ)
2. コンテナの作成
取得したイメージに基づき、書き込み可能なレイヤーを追加してコンテナを生成します。
3. コンテナ内でプログラムを実行
hello-world イメージに含まれるプログラムが実行され、メッセージが表示されます。
この一連の流れで、
「イメージ → コンテナ → 実行」
というDockerの基本サイクルを体験できます。
中盤まとめ(ここまでで理解すべきこと)
- Dockerは仮想マシンではなく、ホストOSのカーネルを共有する軽量な仮想化技術
- イメージはレイヤー構造で効率的に管理される“設計図”
- コンテナはイメージに書き込み可能レイヤーを追加した“実行環境”
- hello-world は Docker の基本動作(pull → create → run)を体験する教材

