PHP容器化部署用Docker吗

wen PHP项目 2

本文目录导读:

PHP容器化部署用Docker吗

  1. 基本PHP Docker部署方案
  2. 常见框架部署示例

是的,PHP应用非常适合用Docker进行容器化部署,Docker可以解决环境不一致、依赖管理、快速部署等问题。

基本PHP Docker部署方案

基础Dockerfile示例(适用于普通PHP项目)

FROM php:8.2-fpm
# 安装系统依赖
RUN apt-get update && apt-get install -y \
    git \
    unzip \
    libpq-dev \
    libzip-dev \
    && docker-php-ext-install pdo_pgsql zip
# 安装Composer
COPY --from=composer:latest /usr/bin/composer /usr/bin/composer
# 设置工作目录
WORKDIR /var/www/html
# 复制项目文件
COPY . .
# 安装PHP依赖
RUN composer install --no-interaction --optimize-autoloader
# 设置权限
RUN chown -R www-data:www-data /var/www/html/storage /var/www/html/bootstrap/cache

搭配Nginx的完整方案

# docker-compose.yml
version: '3.8'
services:
  app:
    build:
      context: .
      dockerfile: Dockerfile
    container_name: php-app
    volumes:
      - ./:/var/www/html
    networks:
      - app-network
  nginx:
    image: nginx:alpine
    container_name: nginx-server
    ports:
      - "80:80"
    volumes:
      - ./:/var/www/html
      - ./nginx/default.conf:/etc/nginx/conf.d/default.conf
    depends_on:
      - app
    networks:
      - app-network
  database:
    image: postgres:15
    container_name: postgres-db
    environment:
      POSTGRES_DB: app_db
      POSTGRES_USER: app_user
      POSTGRES_PASSWORD: secret
    ports:
      - "5432:5432"
    volumes:
      - db-data:/var/lib/postgresql/data
    networks:
      - app-network
volumes:
  db-data:
networks:
  app-network:
    driver: bridge

Nginx配置

# nginx/default.conf
server {
    listen 80;
    server_name localhost;
    root /var/www/html/public;
    index index.php;
    location / {
        try_files $uri $uri/ /index.php?$query_string;
    }
    location ~ \.php$ {
        fastcgi_pass app:9000;
        fastcgi_index index.php;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        include fastcgi_params;
    }
}

生产环境优化建议

# 多阶段构建
# 阶段1: 构建依赖
FROM composer:latest as composer
WORKDIR /app
COPY . .
RUN composer install --no-dev --optimize-autoloader
# 阶段2: 运行时
FROM php:8.2-fpm-alpine
# 安装运行时依赖
RUN apk add --no-cache \
    postgresql-dev \
    && docker-php-ext-install pdo_pgsql
# 复制构建产物
COPY --from=composer /app /var/www/html
COPY --from=composer /app/vendor /var/www/html/vendor
WORKDIR /var/www/html
# 健康检查
HEALTHCHECK --interval=30s --timeout=3s \
    CMD php -v || exit 1

常用命令

# 构建镜像
docker build -t php-app .
# 启动服务
docker-compose up -d
# 查看日志
docker-compose logs -f
# 进入容器
docker exec -it php-app bash
# 重启服务
docker-compose restart
# 停止并删除
docker-compose down -v

最佳实践建议

  1. 使用.dockerignore文件

    .git
    vendor
    node_modules
    .env
    storage/logs/*
    !storage/logs/.gitkeep
  2. 环境变量管理

    # 使用.env文件
    environment:
  • DB_HOST=${DB_HOST}
  • DB_DATABASE=${DB_DATABASE}
  • APP_ENV=${APP_ENV}
  1. 缓存优化
    # 在Dockerfile中添加OPcache配置
    RUN docker-php-ext-install opcache
    COPY opcache.ini /usr/local/etc/php/conf.d/opcache.ini

常见框架部署示例

Laravel特定配置

FROM php:8.2-fpm-alpine
RUN docker-php-ext-install pdo_mysql bcmath
COPY --from=composer:latest /usr/bin/composer /usr/bin/composer
WORKDIR /var/www/html
COPY . .
RUN composer install --no-interaction --optimize-autoloader --no-dev
RUN php artisan optimize \
    && php artisan view:cache \
    && php artisan route:cache \
    && php artisan config:cache

WordPress部署

services:
  wordpress:
    image: wordpress:latest
    ports:
      - "8080:80"
    environment:
      WORDPRESS_DB_HOST: db
      WORDPRESS_DB_USER: root
      WORDPRESS_DB_PASSWORD: secret
    volumes:
      - ./wp-content:/var/www/html/wp-content

Docker部署PHP可以显著简化开发和运维流程,确保环境一致性,方便团队协作和CI/CD集成。

抱歉,评论功能暂时关闭!