Docker Compose、Nginx、MariaDB を使用した PHP アプリケーションのデータ バックアップと復元
クラウド コンピューティングとコンテナ化テクノロジの急速な発展により、ますます多くのアプリケーションが次のことを選択します。 Docker を使用してデプロイして実行します。 Docker エコシステムでは、Docker Compose は、単一の構成ファイルを通じて複数のコンテナーを定義および管理できる非常に人気のあるツールです。
この記事では、Docker Compose、Nginx、MariaDB を使用して、PHP アプリケーションのデータのバックアップと復元を実装する方法を紹介します。サンプル プロジェクトを使用してこのプロセスを示します。
サンプル プロジェクトの構造は次のとおりです。
. ├── docker-compose.yml ├── nginx │ └── default.conf ├── mariadb │ ├── Dockerfile │ └── init.sql └── php ├── Dockerfile └── index.php
まず、プロジェクト全体のコンテナ構成を定義する docker-compose.yml
ファイルを作成する必要があります。サンプル構成は次のとおりです。
version: '3' services: nginx: image: nginx:latest ports: - 80:80 volumes: - ./nginx:/etc/nginx/conf.d - ./php:/var/www/html depends_on: - php mariadb: build: context: ./mariadb environment: - MYSQL_ROOT_PASSWORD=123456 - MYSQL_DATABASE=mydb volumes: - ./mariadb/data:/var/lib/mysql ports: - 3306:3306 php: build: context: ./php volumes: - ./php:/var/www/html
上記の構成では、Nginx、MariaDB、および PHP の 3 つのサービスを定義しました。 Nginx サービスは HTTP リクエストの処理と PHP コンテナ上のアプリケーションへのリクエストの転送を担当し、MariaDB サービスはデータベース サービスを提供し、PHP コンテナは PHP アプリケーションを実行します。
次に、HTTP リクエストを PHP コンテナ上のアプリケーションに転送するための Nginx 構成ファイル default.conf
を作成する必要があります。サンプル構成は次のとおりです。
server { listen 80; server_name localhost; root /var/www/html; location / { try_files $uri $uri/ /index.php?$query_string; } location ~ .php$ { try_files $uri =404; fastcgi_pass php:9000; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; } }
上記の構成では、2 つのロケーション ブロックを定義しました。最初のロケーション ブロックは、画像、CSS、JavaScript ファイルなどの静的ファイル リクエストを処理するために使用され、2 番目のロケーション ブロックは、PHP スクリプト リクエストを PHP コンテナ上の FastCGI プロセスに転送するために使用されます。
次に、MariaDB コンテナーの Dockerfile と初期化スクリプト init.sql
を作成する必要があります。サンプル Dockerfile は次のとおりです。
FROM mariadb:latest COPY init.sql /docker-entrypoint-initdb.d
Sampleinit.sql
このスクリプトは、mydb
データベースと users
テーブルを作成するために使用されます。
CREATE DATABASE IF NOT EXISTS mydb; USE mydb; CREATE TABLE IF NOT EXISTS users ( id INT PRIMARY KEY AUTO_INCREMENT, name VARCHAR(100) NOT NULL, email VARCHAR(100) NOT NULL );
最後に、PHP コンテナーの Dockerfile とサンプル PHP アプリケーション index.php
を作成する必要があります。サンプル Dockerfile は次のとおりです:
FROM php:7.4-fpm RUN apt-get update && apt-get install -y zlib1g-dev libzip-dev RUN docker-php-ext-install zip pdo_mysql COPY index.php /var/www/html
Sampleindex.php
このアプリケーションは、データのバックアップと復元のプロセスをデモンストレーションするために使用されます:
<?php $dbHost = 'mariadb'; $dbUser = 'root'; $dbPass = '123456'; $dbName = 'mydb'; try { $pdo = new PDO("mysql:host=$dbHost;dbname=$dbName", $dbUser, $dbPass, [ PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION, PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC ]); // 插入数据 $pdo->exec("INSERT INTO users (name, email) VALUES ('John Doe', 'john@example.com')"); // 查询数据 $stmt = $pdo->query("SELECT * FROM users"); $users = $stmt->fetchAll(); // 打印数据 foreach ($users as $user) { echo $user['name'] . ' (' . $user['email'] . ')' . PHP_EOL; } } catch (PDOException $e) { echo "Error: " . $e->getMessage(); }
これで、実行できます。 docker- compose up
コマンドを使用して、プロジェクト全体を開始します。ブラウザで http://localhost
にアクセスすると、挿入されたデータと印刷結果が表示されるはずです。
データのバックアップを実現するには、データベースのバックアップ操作を定期的に実行するシェル スクリプトを追加します。サンプル スクリプトは次のとおりです。
#!/bin/bash BACKUP_DIR="/path/to/backup" DATE=$(date +%Y%m%d%H%M%S) BACKUP_FILE="$BACKUP_DIR/mydb_$DATE.sql" docker exec -i CONTAINER_NAME mysqldump -uroot -p123456 mydb > $BACKUP_FILE if [ $? -eq 0 ]; then echo "Backup completed: $BACKUP_FILE" else echo "Backup failed" fi
上記のスクリプトでは、最初にバックアップ ディレクトリとバックアップ ファイル名を定義します。次に、docker exec
コマンドを使用して mysqldump
コマンドを実行し、データベースをエクスポートし、エクスポートされたデータをバックアップ ファイルに保存します。
データを復元するには、データベースの復元操作を実行するシェル スクリプトを作成します。サンプル スクリプトは次のとおりです。
#!/bin/bash BACKUP_FILE="/path/to/backup/mydb_20210101120000.sql" docker exec -i CONTAINER_NAME mysql -uroot -p123456 mydb < $BACKUP_FILE if [ $? -eq 0 ]; then echo "Restore completed" else echo "Restore failed" fi
上記のスクリプトは、docker exec
コマンドを使用して、バックアップ ファイル内のデータをデータベースにインポートします。
上記の手順により、Docker Compose、Nginx、MariaDB を使用した PHP アプリケーションのデータ バックアップと復元を正常に実装できました。バックアップ スクリプトを定期的に実行することで、データベースのスナップショットを作成し、必要なときに復元できるようになります。これにより、アプリケーションの可用性と耐障害性が向上します。
以上がDocker Compose、Nginx、MariaDB を介した PHP アプリケーションのデータのバックアップと復元の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。