0Pricing
PHP Academy · レッスン

PHPアプリケーションをDocker化する

PHP + NginxのDockerイメージを構築し、Docker Composeでオーケストレーションします

「PHPアプリケーションをDocker化する」はCoddyKit上の無料PHP Academyレッスンです。 これはレッスン4/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはPHP Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 PHP Academyコースには全4レッスンが含まれています。

PHPでDockerを使う理由

Dockerは、アプリケーションとその依存関係をポータブルなコンテナーイメージにパッケージ化します。同じイメージを開発、CI、本番環境で同じように実行できるため、「自分のマシンでは動く」問題をなくせます。

基本的なPHP Dockerfile

PHP + Nginxアプリケーション用の最小限のDockerfileです。

# Dockerfile
FROM php:8.3-fpm-alpine

# Install extensions
RUN docker-php-ext-install pdo pdo_mysql opcache

# Install Composer
COPY --from=composer:2 /usr/bin/composer /usr/bin/composer

WORKDIR /app
COPY composer.json composer.lock ./
RUN composer install --no-dev --optimize-autoloader

COPY . .

RUN chown -R www-data:www-data /app/storage /app/bootstrap/cache

マルチステージビルド

マルチステージビルドを使用して、最終イメージを小さく保ちます。ビルドツールは1つのステージにインストールし、成果物だけを最終イメージにコピーします。

# Stage 1: builder
FROM composer:2 AS builder
WORKDIR /app
COPY composer.json composer.lock ./
RUN composer install --no-dev --optimize-autoloader

# Stage 2: runtime
FROM php:8.3-fpm-alpine
WORKDIR /app
COPY --from=builder /app/vendor ./vendor
COPY . .

docker-compose.yml

Docker Composeを使って、複数のサービス(PHP-FPM、Nginx、MySQL、Redis)をオーケストレーションします。

# docker-compose.yml
services:
  app:
    build: .
    volumes:
      - .:/app
  nginx:
    image: nginx:alpine
    ports: ["80:80"]
    volumes:
      - .:/app
      - ./docker/nginx.conf:/etc/nginx/conf.d/default.conf
  mysql:
    image: mysql:8
    environment:
      MYSQL_DATABASE: myapp
      MYSQL_ROOT_PASSWORD: secret
    volumes:
      - db_data:/var/lib/mysql
  redis:
    image: redis:alpine
volumes:
  db_data:

Nginxコンテナの設定

カスタムNginx設定をマウントして、PHP-FPMリクエストをプロキシします。

# docker/nginx.conf
server {
    listen 80;
    root /app/public;
    index index.php;
    location / { try_files $uri /index.php?$query_string; }
    location ~ \.php$ {
        fastcgi_pass app:9000;  # service name from docker-compose
        fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name;
        include fastcgi_params;
    }
}

環境変数

環境変数をコンテナに渡します。シークレットをイメージに決して埋め込まないでください。

# docker-compose.yml:
services:
  app:
    env_file: .env
    # or explicit:
    environment:
      - APP_ENV=production
      - DB_HOST=mysql

Laravel Artisanコマンド

コンテナ内でArtisanコマンドを実行します。

$ docker compose exec app php artisan migrate
$ docker compose exec app php artisan config:cache
$ docker compose exec app php artisan queue:work

ヘルスチェック

ヘルスチェックを追加し、オーケストレーター(Kubernetes、ECS)がコンテナの準備完了を把握できるようにします。

# Dockerfile:
HEALTHCHECK --interval=30s --timeout=5s \
  CMD curl -f http://localhost/health || exit 1

イメージのビルドとプッシュ

イメージをビルドし、レジストリ(Docker Hub、ECR、GHCR)にプッシュします。

$ docker build -t myorg/myapp:1.0.0 .
$ docker push myorg/myapp:1.0.0

Kubernetesデプロイメント

Kubernetesでは、使用するイメージを指定してDeploymentリソースとServiceリソースを定義します。kubectl set imageを使うか、YAMLを更新して適用することで、新しいバージョンをロールアウトします。

本番環境のセキュリティ強化

本番環境でのDockerの実践方法は、非rootユーザーの使用、ルートファイルシステムの読み取り専用化、最小限のベースイメージ(Alpine)の使用、開発用依存関係の除外、イメージタグの固定、docker scoutによるCVEのスキャンです。

まとめ

PHP-FPM + Composer用のDockerfileを作成します。ローカル開発では、Nginx、MySQL、Redisサービスを含むdocker-composeを使用します。本番環境では、マルチステージビルドを使用し、環境変数を注入して、KubernetesまたはECSで実行します。

確認問題

マルチステージDockerビルドの主な利点は何ですか?

よくある質問

「PHPアプリケーションをDocker化する」レッスンは無料ですか?

はい。「PHPアプリケーションをDocker化する」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、PHP Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 PHP Academyコースには全4レッスンが含まれています。

「PHPアプリケーションをDocker化する」で何を学びますか?

PHP + NginxのDockerイメージを構築し、Docker Composeでオーケストレーションします ブラウザで直接実行するハンズオンコードでPHP Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。

PHP Academyを始めるのに経験は必要ですか?

事前経験は必要ありません。CoddyKitのPHP Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン4/4です。

「PHPアプリケーションをDocker化する」レッスンにはどのくらい時間がかかりますか?

ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。

このPHP Academyレッスンでコードを書いて実行できますか?

はい。すべてのPHP Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。

このコースのすべてのレッスン

  1. NginxとPHP-FPMの設定
  2. 環境変数と.envファイル
  3. GitHub Actionsでデプロイする
  4. PHPアプリケーションをDocker化する
← PHP Academyに戻る