はじめに
Dockerを使うには、まず Docker Desktop というアプリをインストールする必要があります。
この記事では、Docker Desktopのインストールから、実際にPHPサイトを表示するまでの手順をまとめています。
Dockerは奥が深く、本格的に学ぼうとするとかなりの知識が必要になります。
しかし、Docker Desktopを使えば、初心者でも比較的簡単に開発環境を構築できます。
今回は、「DockerでPHPサイトを表示する」ことを目的とした、Apache版のシンプルな構成を紹介します。
Dockerって何?
Dockerとは、開発に必要な環境をまとめて「箱(コンテナ)」として管理できる仕組みです。
例えば、PHPの開発をしたい場合、本来であれば以下のような準備が必要になります。
- PHPのインストール
- ApacheやNginxなどのWebサーバーの設定
- 拡張機能のインストール
- PCごとの環境差異への対応
Dockerを使えば、これらを設定ファイルとして管理できるため、
「自分のPCでは動くのに、他の人のPCでは動かない」
という問題を防ぐことができます。
ApacheとNginxの違いについて
Dockerについて調べていると、「Apache」や「Nginx(エンジンエックス)」という言葉をよく見かけると思います。
どちらも Webサーバーソフトウェア と呼ばれるもので、ブラウザからのリクエストを受け取り、HTMLや画像、PHPで生成されたページなどを表示する役割を持っています。
ApacheとNginxのイメージ
Apache
ブラウザ
↓
Apache
↓
PHP
Apacheは、Webサーバーとしての役割とPHPの実行を比較的シンプルに行うことができます。
Nginx
ブラウザ
↓
Nginx
↓
PHP-FPM
↓
PHP
NginxはPHPを直接実行するのではなく、PHP-FPM という別の仕組みと連携してPHPを動かします。
登場人物が一人増えるような感じです。
データベースの有無とは関係ない
「データベースを使うならNginx」「使わないならApache」というわけではありません。
例えば、どちらもMySQLと組み合わせて利用できます。
Apacheの場合
Apache
↓
PHP
↓
MySQL
Nginxの場合
Nginx
↓
PHP-FPM
↓
MySQL
そのため、データベースを使うかどうかではなく、「どのWebサーバーを採用するか」でApacheとNginxが決まります。
今使っている環境の見分け方
Apacheの場合
以下のようなファイルや記述があります。
FROM php:8.2-apache
apache-config.conf
.htaccess
Nginxの場合
以下のようなファイルや記述があります。
FROM nginx:alpine
nginx.conf
どちらを選べばいいの?
Apacheがおすすめなケース
Nginxがおすすめなケース
今回の記事でApacheを採用している理由
今回は、Dockerを初めて触る方向けに「PHPサイトを表示する」ことを目的としているため、設定が比較的シンプルなApacheを採用しています。
ただし、実際の案件ではNginxが使われていることも少なくありません。
もし引き継いだプロジェクトの中に nginx.conf が入っている場合は、その案件ではNginxが採用されている可能性が高いです。
STEP 1:Docker Desktopをインストールする
Mac の場合
- Docker Desktop公式サイト にアクセス
- 「Download for Mac」をクリック
- Apple Silicon(M1/M2/M3/M4) の場合:「Apple Silicon」を選択
- Intel Mac の場合:「Intel Chip」を選択
- ダウンロードされた
.dmgファイルを開く - Docker のアイコンを Applications フォルダにドラッグ&ドロップ
- Applications から Docker を起動
- 初回起動時に権限の許可を求められるので「OK」を押す
Windows の場合
- Docker Desktop公式サイト にアクセス
- 「Download for Windows」をクリック
- ダウンロードされた
.exeファイルを実行 - インストーラーの指示に従って進める
- 「WSL 2」を有効にするか聞かれたら、有効にする(推奨)
- インストール完了後、PCを再起動
- Docker Desktop を起動
STEP 2:インストールできたか確認する
ターミナル(Macの場合)またはコマンドプロンプト(Windowsの場合)を開いて、以下のコマンドを実行します。
docker --version
バージョンが表示されればOKです。
Docker version 27.x.x, build xxxxxxx
もう1つ確認します。
docker compose version
Docker Compose version v2.x.x
これも表示されれば準備完了です。
STEP 3:プロジェクトにDockerファイルを用意する
Docker Desktopはあくまで Dockerを動かすためのアプリ です。
実際にどんなサーバーを立てるかは、プロジェクトごとに設定ファイルを用意 する必要があります。
今回説明するファイルは以下の3つです。
プロジェクト/
├── docker-compose.yml ← ①
├── Dockerfile ←②
└── apache-config.conf ←③
この3つがあれば、PHPサイトを表示する環境 を構築できます。
① docker-compose.yml
services:
web:
build: .
ports:
- "8080:80"
volumes:
- .:/var/www/html
environment:
- PHP_DISPLAY_ERRORS=1
- PHP_ERROR_REPORTING=E_ALL
このファイルの役割
- どのサーバーを起動するか
- どのポートを使うか
- どのフォルダを同期するか
を定義する「指示書」のようなものです。
② Dockerfile
⚠️GitHubを使用している場合、機密情報が入っているファイルがある場合は gitignore を設定してください。(後述します)
FROM php:8.2-apache
RUN docker-php-ext-install pdo pdo_mysql
RUN apt-get update && apt-get install -y libonig-dev && docker-php-ext-install mbstring
RUN a2enmod rewrite
WORKDIR /var/www/html
COPY . /var/www/html/
COPY apache-config.conf /etc/apache2/sites-available/000-default.conf
RUN chown -R www-data:www-data /var/www/html
このファイルの役割
Dockerコンテナの「設計図」です。
ApacheやPHPの設定、必要な機能の追加などを記述します。
③ apache-config.conf
<VirtualHost *:80>
ServerAdmin webmaster@localhost
DocumentRoot /var/www/html
<Directory /var/www/html>
Options Indexes FollowSymLinks
AllowOverride All
Require all granted
</Directory>
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>
このファイルの役割
Apacheの設定ファイルです。
「どこにWebサイトのファイルがあるか」「どのようなアクセスを許可するか」などを設定します。
STEP 4:Dockerを起動する
ターミナルでプロジェクトフォルダに移動します。
cd プロジェクト名
以下のコマンドを実行します。
docker compose up --build
初回はイメージのダウンロードやビルドがあるため、数分かかる場合があります。
以下のようなログが流れます。
[+] Running 4/4
✔ Container project-db-1 Started
✔ Container project-php-1 Started
✔ Container project-web-1 Started
✔ Container project-phpmyadmin-1 Started
以下のようなログが表示されれば起動成功です。
✔ Container project-web-1 Started
STEP 5:ブラウザで確認する
この記事では、
ports:
- "8080:80"
としているため、(docker-compose.yml にて)
http://localhost:8080
へアクセスすると、Webサイトを確認できます。
ポート番号の書き方
ports:
- "左側:右側"
| 位置 | 意味 |
|---|---|
| 左側 | ブラウザからアクセスするポート番号 |
| 右側 | Docker内部のApacheが利用するポート番号 |
Apacheは通常80番ポートを利用するため、右側は80のまま、左側だけ変更するのが一般的です。
例:
ports:
- "80:80"
→ http://localhost
ports:
- "3000:80"
→ http://localhost:3000
ports:
- "8080:80"
→ http://localhost:8080
ポイント
docker-compose.yml ファイルの
services:
web:
build: .
ports:
- "8080:80"
・・・・
ここの ports を確認して、webサービスのportsの左側の数字 を確認しておけば、
ブラウザでどこにアクセスすれば見られるかがわかります!
Dockerの基本操作まとめ
| やりたいこと | コマンド |
|---|---|
| 起動する | docker compose up --build |
| バックグラウンドで起動する | docker compose up --build -d |
| 停止する | docker compose down |
| 停止してデータも消す | docker compose down -v |
| 動いているか確認する | docker compose ps |
| ログを見る | docker compose logs |
-d オプションについて
docker compose up --build -d
-d をつけると バックグラウンド実行 になります。
ターミナルにログが流れ続けないので、同じターミナルで他の作業ができます。
-d をつけない場合は、ログがリアルタイムで表示されます。
エラーが起きた時に原因を確認しやすいので、慣れるまでは -d なしがおすすめです。
Docker Desktopの画面でも確認できる
コマンドが苦手な方は、Docker Desktopアプリの画面からも操作できます。
- Docker Desktopを開く
- 左メニューの「Containers」をクリック
- 起動中のサービスが一覧で表示される
- 各サービスの「停止」「再起動」「ログ表示」がボタンで操作できる
よくあるトラブルと対処法
「port is already allocated」と表示される
Error: port is already allocated
すでに別のアプリがそのポートを使っています。
対処法: docker-compose.yml のポート番号を変更する
# 80番が使われている場合、8000番に変更
ports:
- "8000:80"
この場合、ブラウザでは http://localhost:8000 でアクセスします。
「Cannot connect to the Docker daemon」と表示される
Cannot connect to the Docker daemon
Docker Desktopが起動していません。
対処法: Docker Desktopアプリを起動してから、もう一度コマンドを実行する
初回起動が遅い
初回の docker compose up --build は、サーバーの構築(イメージのダウンロード・ビルド)があるため数分〜10分程度かかることがあります。
2回目以降はキャッシュが利用されるため、比較的早く起動します。
まとめ
| ステップ | やること |
|---|---|
| 1 | Docker Desktop をインストール |
| 2 | docker --version で確認 |
| 3 | Docker関連ファイルを用意 |
| 4 | docker compose up --build で起動 |
| 5 | ブラウザで localhost を開いて確認 |
Docker Desktopは一度インストールすれば、様々なプロジェクトで使えます。
まずは今回のようなシンプルなApache環境でDockerに慣れ、次のステップとしてMySQLやphpMyAdminを追加した開発環境へ発展させていくのがおすすめです。
データベースを利用したDocker環境については、下記記事で詳しく掲載しているのでご参照ください!




