本文へスキップ
サーバー・インフラ 入門 Docker コンテナ イメージ

Dockerとコンテナの基本を理解しよう

更新日:2026-08-02

前の記事までに、WSL上でプロジェクトを編集し、Gitで変更履歴を記録できるようになりました。ここからは、PHP、Apache、MySQLをDockerコンテナで動かします。

この記事ではまだComposeファイルを作りません。次の記事の設定を読めるように、Dockerで使う言葉と役割を先に整理します。

Dockerを使う理由

PHPを動かすだけなら、UbuntuへPHPを直接インストールすることもできます。しかし、複数のプロジェクトで異なるPHPやMySQLのバージョンが必要になると、管理が複雑になります。

Dockerでは、プロジェクトに必要な環境をコンテナへ分けます。

WSL上のプロジェクト
├── ソースコード
├── Dockerの設定ファイル
└── コンテナ
    ├── php:ApacheとPHP
    ├── db:MySQL
    └── phpmyadmin:MySQL管理画面

設定をファイルとして共有できるため、同じDocker環境を別の端末でも作りやすくなります。

イメージとコンテナを理解する

イメージは実行環境のひな型

Dockerイメージには、OSの基本ファイル、PHPなどのソフトウェア、初期設定がまとめられています。

たとえばphp:8.3-apacheは、PHP 8.3とApacheを含む公式イメージです。

イメージは読み取り専用のひな型として扱われ、同じイメージから複数のコンテナを作れます。

コンテナはイメージから作る実行単位

コンテナは、イメージをもとに起動した実行環境です。

  1. php:8.3-apacheイメージを指定する
  2. イメージからphpコンテナを起動する
  3. コンテナ内でApacheとPHPが動く
  4. ブラウザからApacheへアクセスする

コンテナを削除しても、ソースコードやデータを適切にボリュームへ保存していれば、再作成できます。

Dockerfileを理解する

既存のイメージへパッケージや設定を追加し、独自イメージを作る手順を記述するファイルがDockerfileです。

FROM php:8.3-apache

RUN docker-php-ext-install pdo_mysql

WORKDIR /var/www/html
  • FROM:土台にするイメージ
  • RUN:イメージ作成中に実行するコマンド
  • WORKDIR:コンテナ内の作業ディレクトリ

Dockerfileを変更した場合は、イメージを再ビルドします。

docker compose build php

Docker Composeを理解する

Docker Composeは、複数コンテナの構成を一つのYAMLファイルへ定義し、まとめて操作する仕組みです。

services:
  php:
    image: php:8.3-apache

  db:
    image: mysql:8.0

servicesの直下にあるphpdbがサービス名です。この教材では、WebサーバーとPHPを含むサービス名を、本プロジェクトに合わせてphpとします。

主な操作は次のとおりです。

docker compose up -d
docker compose ps
docker compose logs php
docker compose exec php php -v
docker compose down

ポートを理解する

コンテナ内のApacheは80番ポートで待ち受けます。Windowsのブラウザからアクセスするには、ホスト側のポートと接続します。

ports:
  - "8000:80"

左側がホスト側、右側がコンテナ側です。

  1. ブラウザでlocalhost:8000を開く
  2. ホスト側の8000番ポートで受け取る
  3. phpコンテナの80番ポートへ転送する
  4. Apacheがレスポンスを返す

phpMyAdminはホスト側の8080番を使用します。

ports:
  - "8080:80"

ボリュームを理解する

ボリュームは、ホストとコンテナのファイルを共有したり、コンテナを作り直してもデータを残したりする仕組みです。

バインドマウント

volumes:
  - ./src:/var/www/html

WSL上のsrcをコンテナの/var/www/htmlへ接続します。VS Codeで変更したPHPファイルが、コンテナからすぐに見えます。

名前付きボリューム

volumes:
  - db_data:/var/lib/mysql

MySQLのデータをDocker管理の領域へ保存します。コンテナを再作成しても、db_dataを削除しなければデータを残せます。

docker compose down -vは名前付きボリュームも削除します。データが不要だと確認できる場合以外は、安易に-vを付けないでください。

コンテナ間の通信を理解する

同じCompose内のサービスは、サービス名をホスト名として通信できます。

phpコンテナでは接続先をDB_HOST=dbとし、dbコンテナのMySQLへ接続します。

コンテナ内からMySQLへ接続するとき、localhostはPHPコンテナ自身を指します。MySQLサービス名のdbを指定します。

Docker DesktopとWSLの役割

WindowsではDocker Desktopを利用し、WSL 2バックエンドとUbuntuの連携を有効にする構成が一般的です。

Docker Desktopを起動した状態で、Ubuntuから確認します。

docker --version
docker compose version

両方のバージョンが表示されれば、WSLのターミナルからDockerを操作できます。

まとめ

  • イメージは実行環境のひな型、コンテナは起動した実行単位
  • Dockerfileは独自イメージの作成手順を記述する
  • Docker Composeは複数サービスを一つの構成として管理する
  • ポートはホスト側とコンテナ側を接続する
  • ソースコードはバインドマウント、DBデータは名前付きボリュームで保持できる
  • コンテナ同士はComposeのサービス名で通信できる

次の記事では、Dockerfileを使わない構成と、Dockerfileからビルドする構成の二通りでComposeファイルを作ります。