本文目录导读:

是的,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
最佳实践建议
-
使用.dockerignore文件
.git vendor node_modules .env storage/logs/* !storage/logs/.gitkeep -
环境变量管理
# 使用.env文件 environment:
- DB_HOST=${DB_HOST}
- DB_DATABASE=${DB_DATABASE}
- APP_ENV=${APP_ENV}
- 缓存优化
# 在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集成。
版权声明: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直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播