本文目录导读:

我来为您提供 PHP 项目的 Dockerfile 编写方案,包含不同场景的配置。
基础 PHP 环境 Dockerfile
基础版(适合简单项目)
# 基础镜像
FROM php:8.2-fpm
# 设置工作目录
WORKDIR /var/www/html
# 安装系统依赖
RUN apt-get update && apt-get install -y \
git \
curl \
libpng-dev \
libonig-dev \
libxml2-dev \
zip \
unzip \
&& apt-get clean \
&& rm -rf /var/lib/apt/lists/*
# 安装 PHP 扩展
RUN docker-php-ext-install pdo_mysql mbstring exif pcntl bcmath gd
# 安装 Composer
COPY --from=composer:latest /usr/bin/composer /usr/bin/composer
# 复制项目文件
COPY . .
# 设置权限(如果使用 Laravel 等框架)
RUN chown -R www-data:www-data /var/www/html \
&& chmod -R 755 /var/www/html/storage \
&& chmod -R 755 /var/www/html/bootstrap/cache
# 暴露端口
EXPOSE 9000
# 启动命令
CMD ["php-fpm"]
生产优化版
FROM php:8.2-fpm-alpine
# 设置工作目录
WORKDIR /var/www/html
# 安装系统依赖(Alpine 版本)
RUN apk add --no-cache \
git \
curl \
libpng-dev \
libxml2-dev \
zip \
unzip \
&& docker-php-ext-install pdo_mysql mbstring exif pcntl bcmath gd
# 安装 Composer
COPY --from=composer:2 /usr/bin/composer /usr/bin/composer
# 复制项目文件
COPY . .
# 生产环境优化
RUN composer install --optimize-autoloader --no-dev \
&& php artisan optimize \
&& php artisan view:cache \
&& php artisan route:cache
# 设置权限
RUN chown -R www-data:www-data /var/www/html \
&& chmod -R 755 /var/www/html/storage \
&& chmod -R 755 /var/www/html/bootstrap/cache
# 健康检查
HEALTHCHECK --interval=30s --timeout=3s --start-period=5s --retries=3 \
CMD php-fpm -t || exit 1
EXPOSE 9000
USER www-data
CMD ["php-fpm"]
多阶段构建版
# 第一阶段:构建阶段
FROM composer:2 AS composer
WORKDIR /app
COPY composer.json composer.lock ./
RUN composer install --no-scripts --no-autoloader
COPY . .
RUN composer install --optimize-autoloader
# 第二阶段:运行阶段
FROM php:8.2-fpm-alpine
WORKDIR /var/www/html
RUN apk add --no-cache \
libpng-dev \
libxml2-dev \
&& docker-php-ext-install pdo_mysql mbstring exif pcntl bcmath gd
# 从构建阶段复制
COPY --from=composer /app /var/www/html
RUN chown -R www-data:www-data /var/www/html \
&& chmod -R 755 /var/www/html/storage \
&& chmod -R 755 /var/www/html/bootstrap/cache
EXPOSE 9000
CMD ["php-fpm"]
开发环境版(含 Xdebug)
FROM php:8.2-fpm
WORKDIR /var/www/html
# 安装系统依赖
RUN apt-get update && apt-get install -y \
git \
curl \
libpng-dev \
libonig-dev \
libxml2-dev \
zip \
unzip \
nodejs \
npm \
&& apt-get clean \
&& rm -rf /var/lib/apt/lists/*
# 安装 PHP 扩展
RUN docker-php-ext-install pdo_mysql mbstring exif pcntl bcmath gd
# 安装 Xdebug
RUN pecl install xdebug \
&& docker-php-ext-enable xdebug
# Xdebug 配置
RUN echo "xdebug.mode=debug" >> /usr/local/etc/php/conf.d/docker-php-ext-xdebug.ini \
&& echo "xdebug.start_with_request=yes" >> /usr/local/etc/php/conf.d/docker-php-ext-xdebug.ini \
&& echo "xdebug.client_host=host.docker.internal" >> /usr/local/etc/php/conf.d/docker-php-ext-xdebug.ini \
&& echo "xdebug.client_port=9003" >> /usr/local/etc/php/conf.d/docker-php-ext-xdebug.ini \
&& echo "xdebug.idekey=PHPSTORM" >> /usr/local/etc/php/conf.d/docker-php-ext-xdebug.ini
# 安装 Composer
COPY --from=composer:latest /usr/bin/composer /usr/bin/composer
# 复制项目文件
COPY . .
# 设置权限
RUN chown -R www-data:www-data /var/www/html
EXPOSE 9000
CMD ["php-fpm"]
配套的 docker-compose.yml
version: '3.8'
services:
php:
build:
context: .
dockerfile: Dockerfile
container_name: php-app
volumes:
- ./:/var/www/html
ports:
- "9000:9000"
depends_on:
- mysql
networks:
- app-network
nginx:
image: nginx:alpine
container_name: nginx-server
ports:
- "80:80"
- "443:443"
volumes:
- ./:/var/www/html
- ./nginx/conf.d:/etc/nginx/conf.d
depends_on:
- php
networks:
- app-network
mysql:
image: mysql:8.0
container_name: mysql-db
restart: unless-stopped
environment:
MYSQL_DATABASE: ${DB_DATABASE}
MYSQL_ROOT_PASSWORD: ${DB_PASSWORD}
MYSQL_PASSWORD: ${DB_PASSWORD}
MYSQL_USER: ${DB_USERNAME}
ports:
- "3306:3306"
volumes:
- mysql-data:/var/lib/mysql
networks:
- app-network
redis:
image: redis:alpine
container_name: redis-cache
ports:
- "6379:6379"
networks:
- app-network
volumes:
mysql-data:
networks:
app-network:
driver: bridge
Nginx 配置示例
# nginx/conf.d/app.conf
server {
listen 80;
server_name localhost;
root /var/www/html/public;
index index.php index.html;
location / {
try_files $uri $uri/ /index.php?$query_string;
}
location ~ \.php$ {
fastcgi_pass php:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
location ~ /\.ht {
deny all;
}
}
使用说明
构建和运行
# 开发环境 docker-compose up -d # 构建特定环境的镜像 docker build -t my-php-app:latest . # 运行容器 docker run -d -p 9000:9000 my-php-app
常见 PHP 扩展安装
# 常用扩展安装命令
RUN docker-php-ext-install \
pdo_mysql \ # MySQL 扩展
mbstring \ # 多字节字符串
bcmath \ # 数学计算
gd \ # 图像处理
exif \ # EXIF 信息
pcntl \ # 进程控制
opcache # OPcache
性能优化建议
-
选择合适的基础镜像:
- 开发环境:
php:8.2-fpm(包含完整工具) - 生产环境:
php:8.2-fpm-alpine(最小体积)
- 开发环境:
-
多阶段构建:分离构建和运行环境
-
镜像层优化:合并 RUN 命令,减少层数
-
缓存优化:利用 Docker 层缓存机制
-
安全设置:使用非 root 用户运行
这样配置的 Dockerfile 能适应大多数 PHP 项目的需求,您可以根据具体项目特点进行调整。
版权声明:NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播