🔰はじめての方へ

【初心者でもわかる】 Docker Desktopを導入してPHPサイトで使えるようにする方法

Docker
記事内に広告が含まれています。
スポンサーリンク

はじめに

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の実行を比較的シンプルに行うことができます。

  • 情報が多く初心者向け
  • .htaccess が利用できる
  • 設定ファイルが比較的わかりやすい
  • 小〜中規模のサイトやLP制作でもよく利用される

Nginx

ブラウザ
   ↓
Nginx
   ↓
PHP-FPM
   ↓
PHP

NginxはPHPを直接実行するのではなく、PHP-FPM という別の仕組みと連携してPHPを動かします。

登場人物が一人増えるような感じです。

  • 高速で軽量
  • 大規模サイトでも採用されることが多い
  • Laravelなどの実務案件でもよく見かける
  • Apacheより少し設定が複雑

データベースの有無とは関係ない

「データベースを使うなら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がおすすめなケース

  • Dockerを初めて触る
  • PHPの学習を始めたばかり
  • LPや簡単なWebサイトを作る
  • まずはシンプルな構成で理解したい

Nginxがおすすめなケース

  • 引き継いだ案件がNginxを採用している
  • 実務環境に合わせたい
  • Laravelなどのフレームワークを使用する
  • WordPressやECサイトを作る
  • Nginx + PHP-FPM の構成を学びたい

今回の記事でApacheを採用している理由

今回は、Dockerを初めて触る方向けに「PHPサイトを表示する」ことを目的としているため、設定が比較的シンプルなApacheを採用しています。

ただし、実際の案件ではNginxが使われていることも少なくありません。

もし引き継いだプロジェクトの中に nginx.conf が入っている場合は、その案件ではNginxが採用されている可能性が高いです。


STEP 1:Docker Desktopをインストールする

Mac の場合

  1. Docker Desktop公式サイト にアクセス
  2. 「Download for Mac」をクリック
    • Apple Silicon(M1/M2/M3/M4) の場合:「Apple Silicon」を選択
    • Intel Mac の場合:「Intel Chip」を選択
  3. ダウンロードされた .dmg ファイルを開く
  4. Docker のアイコンを Applications フォルダにドラッグ&ドロップ
  5. Applications から Docker を起動
  6. 初回起動時に権限の許可を求められるので「OK」を押す

Windows の場合

  1. Docker Desktop公式サイト にアクセス
  2. 「Download for Windows」をクリック
  3. ダウンロードされた .exe ファイルを実行
  4. インストーラーの指示に従って進める
  5. 「WSL 2」を有効にするか聞かれたら、有効にする(推奨)
  6. インストール完了後、PCを再起動
  7. 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サイトを表示する環境 を構築できます。

※今回はデータベースを使用しないシンプルな構成です。

MySQLやphpMyAdminを使用する場合は、別途設定が必要になります。

① 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アプリの画面からも操作できます。

  1. Docker Desktopを開く
  2. 左メニューの「Containers」をクリック
  3. 起動中のサービスが一覧で表示される
  4. 各サービスの「停止」「再起動」「ログ表示」がボタンで操作できる

よくあるトラブルと対処法

「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回目以降はキャッシュが利用されるため、比較的早く起動します。


まとめ

ステップやること
1Docker Desktop をインストール
2docker --version で確認
3Docker関連ファイルを用意
4docker compose up --build で起動
5ブラウザで localhost を開いて確認

Docker Desktopは一度インストールすれば、様々なプロジェクトで使えます。

まずは今回のようなシンプルなApache環境でDockerに慣れ、次のステップとしてMySQLやphpMyAdminを追加した開発環境へ発展させていくのがおすすめです。

データベースを利用したDocker環境については、下記記事で詳しく掲載しているのでご参照ください!

【データベース×Docker】PHPサイトをローカルで動かす環境を作る方法|Nginx
はじめにWeb制作をしていると、こんな場面がありませんか?コードを書いたけど、レンタルサーバーにアップロードしないと動作確認できないデータベースを使うページを作ったけど、ローカルで確認する方法がわからないPHPファイルをブラウザで開いても、…