Skip to content

Docker Deep Dive: 仕組みとアーキテクチャ

1. 全体像と抽象化レイヤー (System Overview)

本プロジェクトにおける開発環境から実行環境までのレイヤー構成を図解します。

なぜ Docker は軽量なのか?

仮想マシン (VM) サーバー全体を仮想化するのに対し、Docker コンテナは ホスト OS(ここでは Debian Guest)のカーネルを共有 します。

  • Virtual Machine: 各 VM に完全な OS (カーネル含む) が必要。オーバーヘッドが大きい。
  • Container: プロセスとして動作し、名前空間 (Namespace) と cgroups で隔離されているだけ。起動はプロセス起動と同等の速さ。

FAQ: 「ホストOSのカーネルを共有する」とは具体的に? (VMとの違い)

2. Docker イメージとビルドプロセス

イメージ作成からコンテナ実行までの流れを解説します。

イメージレイヤーの概念

Docker イメージは、変更差分の積み重ね(レイヤー)でできています。

  1. Base Image: debian:bullseye (OSのファイルシステム)
  2. Layer 1: apt-get install ... (変更分のみ保存)
  3. Layer 2: COPY . . (ソースコード)

これにより、nginxwordpress が同じ debian:bullseye をベースにしている場合、ベース部分はディスク上で共有され、さらに効率化されます。

3. Docker Compose の仕組み

docker-compose.yml は、複数のコンテナの関係性(ネットワーク、ボリューム、起動順序)を定義する「設計図」です。 make コマンドで実行される docker compose up の裏側では、以下の順序でリソースが作成されます。

ネットワーク (Bridge Network)

networks: inception を定義することで、Docker は内部 DNS サーバーを立ち上げます。 これにより、コンテナは「IPアドレス」ではなく「サービス名 (wordpress, mariadb)」でお互いを発見 (Service Discovery) できます。

FAQ: Dockerネットワークの種類とBridgeを採用した理由は?

ボリューム (Bind Mounts)

本プロジェクトでは、driver_opts を使用してホストのディレクトリ (/home/user/data/...) を直接マウントしています。

  • Host: /home/user/data/wordpress
  • Container: /var/www/html これが「窓」のように機能し、コンテナが削除されてもホスト側にデータが残る「永続化」を実現しています。

FAQ: Volume driver_opts を使用する理由と仕組み

4. 開発者(あなた)と環境の関係

この図が示す通り、あなたはホストマシンから SSH 経由で Docker Engine を操作し、同時にブラウザからポート転送経由で Web サービスにアクセスしています。 Docker はこの複雑な環境を「コンテナ」という単位でカプセル化し、環境差異を吸収しています。

Released under the MIT License.