首页 >后端开发 >php教程 >Dockerize 您的 PHP 和 MySQL 应用程序:多容器应用程序分步指南

Dockerize 您的 PHP 和 MySQL 应用程序:多容器应用程序分步指南

Susan Sarandon
Susan Sarandon原创
2024-12-07 19:19:13258浏览

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 撰写文件

这是 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 是否已创建。

此设置的主要特点

服务依赖管理:depends_on 确保 MySQL 在 PHP 应用程序之前启动。
数据持久化:mysql-data卷存储MySQL数据,防止容器重启后丢失。
端口映射:通过映射到主机的端口轻松访问服务。

扩展设置

将更多服务(如 Nginx 或 Redis)添加到 Compose 文件中。
使用 .env 文件来管理敏感配置。
使用 Docker Compose 的缩放选项来水平缩放服务。

结论

通过此设置,您已经使用 Docker Compose 构建了一个可扩展的模块化 PHP 和 MySQL 应用程序。容器化可简化环境管理并为您的应用程序云部署做好准备。无论您是初学者还是经验丰富的开发人员,Docker 都是现代应用程序开发不可或缺的工具。

准备好将您的设置提升到新的水平了吗?尝试将其与 CI/CD 管道或 Kubernetes 集成以实现生产级环境。

以上是Dockerize 您的 PHP 和 MySQL 应用程序:多容器应用程序分步指南的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn