初心者向けDocker入門:Webサーバー環境をコンテナで構築する基本手順
はじめに
現代のWeb開発において、「Docker」という言葉を聞かない日はないほど、コンテナ技術はデファクトスタンダードになりつつあります。
「開発環境と本番環境のズレをなくしたい」
「複数のプロジェクトを効率的に管理したい」
そんな悩みを抱えている方にとって、Dockerは強力な解決策となります。
この記事では、自身のWikiメモを元に、Dockerとは何かという基礎から、実際にDockerを使ってNginxとPHP-FPMのWebサーバー環境を構築するまでの基本手順を、初心者にも分かりやすく解説します。
Dockerとは? コンテナの魔法
Dockerは、アプリケーションとその実行に必要なすべてのもの(コード、ランタイム、システムツール、ライブラリなど)を**「コンテナ」**という隔離された環境にまとめてパッケージ化する技術です。
従来の仮想マシンと異なり、OS全体を仮想化するのではなく、OSのカーネルを共有するため、非常に軽量で高速に動作します。
コンテナのメリット:
- 環境の統一: 開発環境、テスト環境、本番環境で全く同じ環境を簡単に再現できる。
- 可搬性: コンテナイメージを一度作れば、どのDocker環境でも同じように動かせる。
- 分離性: アプリケーションごとに環境が隔離されるため、依存関係の競合を防げる。
- 効率性: 仮想マシンに比べてリソース消費が少なく、起動も高速。
Step 1: Docker Desktopのインストール
DockerをローカルPCで動かすための「Docker Desktop」をインストールします。
-
Windows / macOS: Docker公式サイトからインストーラーをダウンロードし、指示に従ってインストールしてください。
https://www.docker.com/products/docker-desktop/ - Linux: 各ディストリビューションの公式手順に従ってインストールします。
インストール後、ターミナルで以下のコマンドを実行し、Dockerが正しく動作することを確認します。
docker --version
docker compose version # Docker Compose V2がインストールされているか確認
Step 2: プロジェクトディレクトリの作成とファイル構成
Webサーバー環境を構築するためのプロジェクトディレクトリを作成し、必要なファイルを配置します。
.
├── docker-compose.yml
├── nginx
│ └── default.conf
└── php
└── Dockerfile
└── php.ini
Step 3: docker-compose.ymlの作成
docker-compose.ymlは、複数のコンテナを一括で定義・管理するためのファイルです。NginxとPHP-FPMの2つのサービスを定義します。
version: '3.8' # Docker Composeのバージョン
services:
# Nginxサービス
nginx:
image: nginx:latest # 最新のNginxイメージを使用
ports:
- "80:80" # ホストの80番ポートをコンテナの80番ポートにマッピング
volumes:
- ./nginx/default.conf:/etc/nginx/conf.d/default.conf:ro # Nginx設定ファイルをマウント
- ./html:/var/www/html # Webサイトのファイルをマウント
depends_on:
- php # phpサービスが起動してからnginxを起動
networks:
- app-network # ネットワーク設定
# PHP-FPMサービス
php:
build:
context: ./php # phpディレクトリ内のDockerfileをビルド
volumes:
- ./html:/var/www/html # Webサイトのファイルをマウント
networks:
- app-network # ネットワーク設定
# ネットワーク定義
app-network:
driver: bridge # bridgeネットワークを使用
Step 4: Nginx設定ファイル (nginx/default.conf) の作成
NginxがリクエストをPHP-FPMに転送するための設定ファイルです。
server {
listen 80;
server_name localhost;
root /var/www/html;
index index.php index.html;
# 静的ファイルはNginxが直接処理
location / {
try_files $uri $uri/ =404;
}
# PHPファイルをPHP-FPMに転送
location ~ \.php$ {
fastcgi_pass php:9000; # phpサービス(コンテナ名)の9000番ポート
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
# .htaccessファイルを隠す
location ~ /\.ht {
deny all;
}
}
Step 5: PHP-FPM用 Dockerfileとphp.iniの作成
PHP-FPMコンテナをカスタマイズするためのDockerfileと、PHPの設定ファイルphp.iniを作成します。
php/Dockerfile
PHPのベースイメージに、追加のPHP拡張機能をインストールします。
FROM php:8.2-fpm # PHP 8.2のFPMイメージを使用
# 必要なPHP拡張機能をインストール
RUN apt-get update && apt-get install -y \
libpq-dev \
libzip-dev \
libjpeg-dev \
libpng-dev \
libfreetype6-dev \
&& docker-php-ext-install pdo_mysql zip gd # MySQL/MariaDB接続、zip、画像処理用gdをインストール
# カスタムphp.iniをコンテナ内にコピー
COPY php.ini /usr/local/etc/php/conf.d/
php/php.ini
memory_limitやdate.timezoneなど、PHPの基本的な設定を記述します。
# メモリ制限
memory_limit = 256M
# アップロードファイルの最大サイズ
upload_max_filesize = 32M
post_max_size = 32M
# タイムゾーン
date.timezone = Asia/Tokyo
# エラー表示設定 (開発中はOn, 本番ではOff)
display_errors = Off
log_errors = On
error_log = /var/log/php/error.log
Step 6: Webサイトファイル (html/index.php) の作成
Webサーバーで表示されるための簡単なPHPファイルを作成します。
<?php
echo "<h1>Hello from Nginx & PHP-FPM with Docker!</h1>";
echo "<p>PHP Version: " . phpversion() . "</p>";
phpinfo();
?>
Step 7: Docker Composeで環境を起動する
全てのファイルが準備できたら、プロジェクトルートで以下のコマンドを実行し、Docker環境を起動します。
docker compose up -d
-
up:docker-compose.ymlに定義されたサービスを起動します。 -
-d: デタッチモードでバックグラウンド実行します。
ブラウザでhttp://localhostにアクセスし、PHP情報が表示されれば成功です!
コンテナを停止・削除する場合は、以下のコマンドを実行します。
docker compose down
おわりに
Dockerを使ったWebサーバー環境構築は、一度設定してしまえば、他のプロジェクトや開発者との環境共有が非常に簡単になります。今回の基本設定をベースに、データベース(MySQL/PostgreSQL)やComposerなどのツールを追加していくことで、より複雑な開発環境も構築できるようになります。
コンテナ技術を学ぶ第一歩として、この記事があなたの開発効率向上の一助となれば幸いです。
この記事で紹介した内容以外にも、技術情報をブログで発信しています。
MEANTECH
Discussion