ホームページ >バックエンド開発 >PHPチュートリアル >PHP および MySQL アプリケーションを Docker 化する: マルチコンテナー アプリのステップバイステップ ガイド

PHP および MySQL アプリケーションを Docker 化する: マルチコンテナー アプリのステップバイステップ ガイド

Susan Sarandon
Susan Sarandonオリジナル
2024-12-07 19:19:13254ブラウズ

Dockerize Your PHP and MySQL Application: A Step-by-Step Guide to Multi-Container Apps

現代のソフトウェア開発の世界では、コンテナ化が効率的な導入と拡張性の基礎となっています。 Docker を使用すると、アプリケーションとその依存関係をポータブル コンテナーに簡単にパッケージ化できます。このブログでは、Docker Compose を使用してマルチコンテナーの PHP および MySQL アプリケーションを作成する手順を説明します。

PHP と MySQL に Docker を使用する理由

一貫性: 開発と運用のすべての段階で同じ環境でアプリを実行します。
分離: PHP や MySQL などのサービスを、モジュール式で保守可能なセットアップのために別のコンテナーに保持します。
スケーリングの容易さ: アプリの成長に合わせてコンテナを簡単に追加または削除できます。

プロジェクトの構造

プロジェクト ディレクトリは次のようになります:

project/
│
├── php-app/
│   ├── Dockerfile
│   └── index.php
│
└── docker-compose.yml

Docker Compose ファイル

これが docker-compose.yml ファイルです:

version: '3.8'

services:
  php-app:
    build: ./php-app  # Builds the PHP app Docker image from the ./php-app directory
    ports:
      - "8080:80"  # Maps port 8080 on the host to port 80 in the container
    depends_on:
      - mysql  # Ensures MySQL starts before the PHP app

  mysql:
    image: mysql:8.0  # Uses the official MySQL image
    ports:
      - "3306:3306"  # Maps port 3306 on the host to port 3306 in the container
    environment:
      MYSQL_ROOT_PASSWORD: root  # Root password for MySQL
      MYSQL_DATABASE: mydb  # Initial database to create
    volumes:
      - mysql-data:/var/lib/mysql  # Persists MySQL data in a named volume

volumes:
  mysql-data:  # Declares a named volume for MySQL data persistence

PHPアプリケーションコード

index.php ファイルは MySQL コンテナに接続します。

<?php
$servername = "mysql";  // Service name defined in docker-compose.yml
$username = "root";
$password = "root";
$database = "mydb";

try {
    // Create connection
    $conn = new PDO("mysql:host=$servername;dbname=$database", $username, $password);

    // Set PDO error mode to exception
    $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

    echo "Connected to MySQL successfully!";
} catch (PDOException $e) {
    echo "Connection failed: " . $e->getMessage();
}
?>

PHP アプリの Dockerfile

Dockerfile は、必要な依存関係を含む PHP コンテナを構築します。

# Use the official PHP image
FROM php:8.2-apache

# Install PDO MySQL extension
RUN docker-php-ext-install pdo pdo_mysql

# Set the working directory
WORKDIR /var/www/html

# Copy the application code
COPY index.php .

# Expose port 80
EXPOSE 80

ビルドと実行の手順

ディレクトリ構造を作成する

  • Dockerfile とindex.php を php-app フォルダーに配置します。
  • docker-compose.yml をルート プロジェクト フォルダーに配置します。

コンテナのビルドと起動 プロジェクト ディレクトリでターミナルを開き、次のコマンドを実行します。

docker-compose up --build

PHP アプリケーションにアクセスする ブラウザで http://localhost:8080 にアクセスします。すべてが正しく設定されている場合は、以下が表示されるはずです。

Connected to MySQL successfully!

MySQL データベースを検証する

MySQL クライアントまたは MySQL Workbench を使用します。

を使用して localhost:3306 に接続します。 ユーザー名: root
パスワード: root
データベース mydb が作成されたことを確認します。

このセットアップの主な特徴

サービスの依存関係管理: depend_on は、PHP アプリケーションよりも前に MySQL が開始されることを保証します。
データの永続性: mysql-data ボリュームには MySQL データが保存され、コンテナーの再起動後の損失を防ぎます。
ポート マッピング: ホスト マシンにマッピングされたポートを通じてサービスに簡単にアクセスします。

セットアップの拡張

Nginx や Redis などのサービスを Compose ファイルに追加します。
.env ファイルを使用して機密構成を管理します。
Docker Compose の水平スケーリング用のスケール オプションを使用してサービスをスケールします。

結論

このセットアップでは、Docker Compose を使用してスケーラブルなモジュール式の PHP および MySQL アプリケーションを構築しました。コンテナ化により、環境管理が簡素化され、アプリをクラウド展開に向けて準備できます。初心者でも経験豊富な開発者でも、Docker は最新のアプリケーション開発に不可欠なツールです。

セットアップを次のレベルに引き上げる準備はできましたか?これを CI/CD パイプラインまたは Kubernetes と統合して運用グレードの環境を実現してみてください。

以上がPHP および MySQL アプリケーションを Docker 化する: マルチコンテナー アプリのステップバイステップ ガイドの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。