通过Docker Compose、Nginx和MariaDB实现PHP应用程序的数据备份与还原

通过Docker Compose、Nginx和MariaDB实现PHP应用程序的数据备份与还原

通过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。Nginx服务负责处理HTTP请求,将请求转发到PHP容器上的应用程序;MariaDB服务提供数据库服务;PHP容器运行PHP应用程序。

接下来,我们需要创建一个Nginx配置文件default.conf,用于将HTTP请求转发到PHP容器上的应用程序。示例配置如下:

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;
    }
}
登录后复制

在上面的配置中,我们定义了两个location块。第一个location块用于处理静态文件请求,例如图片、CSS和JavaScript文件;第二个location块用于将PHP脚本请求转发到PHP容器上的FastCGI进程。

然后,我们需要创建一个MariaDB容器的Dockerfile和初始化脚本init.sql。示例Dockerfile如下:

FROM mariadb:latest

COPY init.sql /docker-entrypoint-initdb.d
登录后复制

示例init.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
登录后复制

示例index.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,应该能够看到插入的数据和打印的结果。

为了实现数据备份,我们可以添加一个Shell脚本来定期执行数据库备份操作。示例脚本如下:

#!/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命令来导出数据库,并将导出的数据保存到备份文件中。

为了实现数据还原,我们可以创建一个Shell脚本来执行数据库还原操作。示例脚本如下:

#!/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中文网其它相关文章!