>  기사  >  백엔드 개발  >  Docker Compose, Nginx 및 MariaDB를 통한 PHP 애플리케이션의 데이터 백업 및 복원

Docker Compose, Nginx 및 MariaDB를 통한 PHP 애플리케이션의 데이터 백업 및 복원

王林
王林원래의
2023-10-12 11:14:02963검색

通过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 파일을 생성해야 합니다. 샘플 구성은 다음과 같습니다. 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 execrrreee

위 구성에서는 Nginx, MariaDB 및 PHP의 세 가지 서비스를 정의했습니다. Nginx 서비스는 HTTP 요청을 처리하고 PHP 컨테이너의 애플리케이션에 요청을 전달하는 역할을 합니다. MariaDB 서비스는 PHP 컨테이너가 PHP 애플리케이션을 실행합니다.

다음으로 HTTP 요청을 PHP 컨테이너의 애플리케이션에 전달하기 위한 Nginx 구성 파일 default.conf를 생성해야 합니다. 샘플 구성은 다음과 같습니다. 🎜rrreee🎜위 구성에서는 두 개의 위치 블록을 정의했습니다. 첫 번째 위치 블록은 이미지, CSS 및 JavaScript 파일과 같은 정적 파일 요청을 처리하는 데 사용되며, 두 번째 위치 블록은 PHP 스크립트 요청을 PHP 컨테이너의 FastCGI 프로세스에 전달하는 데 사용됩니다. 🎜🎜그런 다음 MariaDB 컨테이너 Dockerfile과 초기화 스크립트 init.sql을 생성해야 합니다. 샘플 Dockerfile은 다음과 같습니다. 🎜rrreee🎜샘플 init.sql 스크립트는 mydb 데이터베이스와 users 테이블을 생성하는 데 사용됩니다. 🎜 rrreee🎜마지막으로 PHP 컨테이너용 Dockerfile과 샘플 PHP 애플리케이션 index.php를 생성해야 합니다. 샘플 Dockerfile은 다음과 같습니다. 🎜rrreee🎜샘플 index.php 애플리케이션은 데이터 백업 및 복원 프로세스를 보여주는 데 사용됩니다. 🎜rrreee🎜이제 docker-compose를 실행할 수 있습니다. up 명령을 사용하여 전체 프로젝트를 시작합니다. 브라우저에서 http://localhost로 접속하시면 삽입된 데이터와 인쇄된 결과를 보실 수 있습니다. 🎜🎜데이터 백업을 위해 정기적으로 데이터베이스 백업 작업을 수행하는 셸 스크립트를 추가할 수 있습니다. 샘플 스크립트는 다음과 같습니다. 🎜rrreee🎜위 스크립트는 먼저 백업 디렉터리와 백업 파일 이름을 정의합니다. 그런 다음 docker exec 명령을 사용하여 mysqldump 명령을 실행하여 데이터베이스를 내보내고 내보낸 데이터를 백업 파일에 저장합니다. 🎜🎜데이터 복원을 위해 데이터베이스 복원 작업을 수행하는 셸 스크립트를 만들 수 있습니다. 샘플 스크립트는 다음과 같습니다. 🎜rrreee🎜위 스크립트는 docker exec 명령을 사용하여 백업 파일의 데이터를 데이터베이스로 가져옵니다. 🎜🎜위 단계를 통해 Docker Compose, Nginx 및 MariaDB를 사용하여 PHP 애플리케이션의 데이터 백업 및 복원을 성공적으로 구현했습니다. 백업 스크립트를 정기적으로 실행하면 필요할 때 복원할 수 있도록 데이터베이스의 스냅샷을 생성할 수 있습니다. 이는 애플리케이션에 더 높은 가용성과 내결함성을 제공합니다. 🎜

위 내용은 Docker Compose, Nginx 및 MariaDB를 통한 PHP 애플리케이션의 데이터 백업 및 복원의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.