要在 Docker 中部署 PHP 环境,通常需要搭配 Web 服务器(如 Nginx/Apache)和 PHP-FPM。以下是详细步骤:

方案一:使用 Docker Compose(推荐)

yaml
# docker-compose.yml
version: '3.8'

services:
  # PHP-FPM 服务
  php:
    image: php:8.2-fpm
    volumes:
      - ./src:/var/www/html  # 挂载项目代码
    # 可选:安装扩展(示例)
    command: >
      bash -c "docker-php-ext-install pdo pdo_mysql && exec php-fpm"

  # Nginx 服务
  nginx:
    image: nginx:alpine
    ports:
      - "8080:80"  # 暴露端口到宿主机
    volumes:
      - ./src:/var/www/html
      - ./nginx.conf:/etc/nginx/conf.d/default.conf
    depends_on:
      - php

  # 数据库(可选)
  mysql:
    image: mysql:8.0
    environment:
      MYSQL_ROOT_PASSWORD: example
    volumes:
      - mysql-data:/var/lib/mysql

volumes:
  mysql-data:

步骤说明:

  1. 创建目录结构

    text
    myapp/
    ├── docker-compose.yml
    ├── nginx.conf
    └── src/
        └── index.php
  2. 配置 Nginx (nginx.conf):

    nginx
    server {
        listen 80;
        root /var/www/html;
        
        location / {
            index index.php;
        }
        
        location ~ \.php$ {
            fastcgi_pass php:9000;  # 指向 PHP-FPM 服务
            include fastcgi_params;
            fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        }
    }
  3. 创建测试文件 (src/index.php):

    php
    <?php
    phpinfo();
  4. 启动服务

    bash
    docker-compose up -d
  5. 访问测试
    打开浏览器访问 http://localhost:8080


方案二:单容器运行(PHP 内置服务器)

bash
# 快速启动(开发环境)
docker run -d --name php-app \
  -p 8080:80 \
  -v $(pwd)/src:/var/www/html \
  php:8.2-apache

常用操作:

操作 命令
构建并启动 docker-compose up -d
查看日志 docker-compose logs -f
停止服务 docker-compose down
安装 PHP 扩展 docker-php-ext-install 扩展名
进入容器 docker exec -it 容器名 bash

常见问题解决:

  1. 文件权限问题

    • 在 Dockerfile 中添加:RUN chown -R www-data:www-data /var/www/html

  2. 安装扩展

    Dockerfile
    FROM php:8.2-fpm
    RUN docker-php-ext-install pdo pdo_mysql mysqli
  3. 自定义 php.ini

    yaml
    # docker-compose.yml
    volumes:
      - ./php.ini:/usr/local/etc/php/conf.d/custom.ini
  4. 连接 MySQL

    php
    // PHP 代码中连接数据库
    $host = 'mysql';  // 使用 Docker 服务名
    $db   = 'test';
    $user = 'root';
    $pass = 'example';

提示:生产环境需注意:

  1. 使用非 root 用户运行

  2. 配置 SSL/TLS

  3. 设置合理的资源限制

  4. 使用 .env 文件管理敏感信息

通过以上步骤,您已成功在 Docker 中部署 PHP 环境。可根据实际需求调整配置和扩展。

访问以下资源了解更多信息:

Free Resources

official

docker文档

Article

docker教程

PHP 学习路径(Roadmap)

声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。