使用 Docker、PHP 8.4、Composer、Nginx 和 MariaDB 创建简单环境

发布: (2026年2月3日 GMT+8 08:40)
4 分钟阅读
原文: Dev.to

Source: Dev.to

First article on this platform – keeping things simple, practical, and easy to follow.

如果你曾经为安装 PHP 扩展、配置 Nginx 或搭建本地数据库而苦恼,Docker 可以让你的工作轻松许多。
在本指南中,我们将构建一个现代、简约的开发环境,只需一条命令即可运行。

技术栈

  • PHP 8.4 (FPM)
  • Composer
  • Nginx
  • MariaDB
  • Docker & Docker Compose

所有服务可通过一个命令一起启动。

文件夹结构

root-folder/
├── docker/
│   ├── nginx/
│   │   └── default.conf
│   └── php/
│       └── Dockerfile
├── src/
│   └── index.php
├── docker-compose.yml
└── composer.json
文件夹责任
docker/php自定义 PHP 镜像及扩展
docker/nginxNginx 配置
src应用源代码

1. PHP Dockerfile

创建 docker/php/Dockerfile:

# Base image with PHP 8.4 and FPM
FROM php:8.4-fpm

# Install system dependencies and PHP extensions
RUN apt-get update && apt-get install -y \
    git \
    unzip \
    libzip-dev \
    && docker-php-ext-install pdo pdo_mysql zip

# Install Composer from the official image
COPY --from=composer:2 /usr/bin/composer /usr/bin/composer

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

What it does

  • 使用 PHP 8.4‑FPM(适用于 Nginx)。
  • 安装常用工具(gitunzip)。
  • 启用必要的扩展(pdopdo_mysqlzip)。
  • 添加 Composer,无需手动下载。

2. Nginx 配置

Create docker/nginx/default.conf:

server {
    listen 80;
    index index.php index.html;
    root /var/www/html;

    location / {
        try_files $uri $uri/ /index.php?$query_string;
    }

    location ~ \.php$ {
        fastcgi_pass php:9000;
        fastcgi_index index.php;
        include fastcgi_params;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    }
}

关键点

  • 监听 80 端口。
  • /var/www/html 提供文件。
  • 通过 FastCGI 将 .php 请求转发到 PHP 容器。

3. Docker‑Compose 文件

Create docker-compose.yml in the project root:

version: '3.9'

services:
  php:
    build: ./docker/php
    container_name: php84
    volumes:
      - ./src:/var/www/html
    depends_on:
      - mariadb

  nginx:
    image: nginx:latest
    container_name: nginx
    ports:
      - "8080:80"
    volumes:
      - ./src:/var/www/html
      - ./docker/nginx/default.conf:/etc/nginx/conf.d/default.conf
    depends_on:
      - php

  mariadb:
    image: mariadb:11
    container_name: mariadb
    environment:
      MYSQL_ROOT_PASSWORD: root
      MYSQL_DATABASE: app
      MYSQL_USER: app
      MYSQL_PASSWORD: app
    ports:
      - "3306:3306"
    volumes:
      - mariadb_data:/var/lib/mysql

volumes:
  mariadb_data:

说明

服务目的
php构建自定义 PHP 8.4 镜像,挂载 src/ 以便更改即时生效,并等待 MariaDB 启动。
nginx使用官方 Nginx 镜像,将主机端口 8080 映射到容器端口 80,共享相同的代码卷,并加载自定义配置。
mariadb运行 MariaDB 11,启动时创建数据库和用户,暴露端口 3306(可选),并将数据存储在命名卷 (mariadb_data) 中。
volumesmariadb_data 在容器重启之间持久化数据库。

4. 示例 PHP 应用

Create src/index.php:

 PDO::ERRMODE_EXCEPTION,
            PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
        ]
    );

    echo "PHP is running and connected to MariaDB successfully!";
} catch (PDOException $e) {
    echo "Database connection failed: {$e->getMessage()}";
}
  • 使用 PDO(在 PHP 中推荐的数据库访问方式)。
  • 通过服务名 mariadb 连接 MariaDB。
  • 在连接成功时打印成功信息,否则显示错误。

5. Composer 配置

创建 composer.json

{
  "name": "example/docker-php",
  "require": {}
}

在容器内运行 Composer

docker compose run --rm php composer install

这使用了 Docker 中定义的相同 PHP 环境,避免了本地 PHP 版本的问题。

6. 完整启动

在项目根目录下:

docker compose up -d --build

打开浏览器并访问:

http://localhost:8080

你应该看到:

PHP is running and connected to MariaDB successfully!

如果出现此信息,说明 PHP、Nginx 和 MariaDB 正常通信。 🎉

您将获得

  • PHP 8.4 可直接用于开发
  • Composer 完全集成
  • Nginx 作为轻量级网页服务器
  • MariaDB 带持久化数据
  • 干净且隔离的开发环境

这是一个适用于纯 PHP 项目和 API 的坚实起点。

今天的内容就到这里,朋友们!

Back to Blog

相关文章

阅读更多 »

当 AI 给你一巴掌

当 AI 给你当头一棒:在 Adama 中调试 Claude 生成的代码。你是否曾让 AI “vibe‑code” 一个复杂功能,却花了数小时调试细微的 bug……