本文目录导读:

- 第一步:准备项目结构和基础文件
- 第二步:编写
.dockerignore文件 - 第三步:编写
Dockerfile - 第四步:编写
docker-compose.yml(推荐) - 第五步:创建 Nginx 配置文件
- 第六步:构建并运行
- 常见问题与优化
将PHP项目容器化运行,核心是使用 Docker 来构建镜像并运行容器,以下是详细的步骤,适用于大多数常见的 PHP 项目(如 Laravel、Symfony、ThinkPHP 或原生 PHP)。
第一步:准备项目结构和基础文件
在项目根目录下,你需要创建几个关键文件:
your-php-project/ ├── docker-compose.yml # (推荐) 用于编排多个容器 ├── Dockerfile # (核心) 定义 PHP 环境的镜像 ├── .dockerignore # (可选) 忽略不需要的文件 └── ... (你的PHP项目文件)
第二步:编写 .dockerignore 文件
排除不需要进入镜像的文件,减少镜像体积和构建时间。
.git .gitignore node_modules vendor .env *.log *.md docker-compose.yml
第三步:编写 Dockerfile
这是最关键的一步,它定义了你的应用运行环境。
基础镜像选择
- 生产环境:建议使用生产级优化的镜像,如
php:8.2-fpm-alpine(超小体积)。 - 开发环境:可以使用更完整的镜像如
php:8.2-fpm。
示例 Dockerfile(适用于 Laravel / ThinkPHP 等)
# 使用 PHP-FPM 基础镜像
FROM php:8.2-fpm-alpine
# 设置工作目录
WORKDIR /var/www/html
# 安装系统依赖
RUN apk add --no-cache \
libzip-dev \
libpng-dev \
libjpeg-turbo-dev \
freetype-dev \
bash \
unzip \
# 如果你需要 Redis、MySQL 等扩展,可以继续添加
&& docker-php-ext-install pdo_mysql zip gd bcmath
# 安装 Composer(从官方镜像复制)
COPY --from=composer:latest /usr/bin/composer /usr/bin/composer
# 复制项目文件到容器(注意:生产环境通常用 volume 挂载)
COPY . /var/www/html
# 设置目录权限(非根用户运行更安全)
RUN chown -R www-data:www-data /var/www/html \
&& chmod -R 775 /var/www/html/storage /var/www/html/bootstrap/cache
# 安装 PHP 依赖(如果项目在构建时就需要 vendor)
RUN composer install --no-dev --optimize-autoloader --no-interaction
# 暴露端口(php-fpm 默认 9000,但通常通过 Nginx 反向代理)
EXPOSE 9000
# 启动 PHP-FPM
CMD ["php-fpm"]
注意:如果你的项目不需要
composer install在镜像构建时运行(而是运行时挂载),可以去掉COPY和RUN composer install这两行,改用docker-compose volumes挂载项目目录。
第四步:编写 docker-compose.yml(推荐)
大部分 PHP 项目需要 PHP + Nginx + 数据库 三个服务,使用 docker-compose 可以一键启动所有服务。
version: '3.8'
services:
# 1. PHP 服务(使用我们构建的镜像)
php:
build:
context: .
dockerfile: Dockerfile
container_name: my-php-app
volumes:
- ./:/var/www/html # 挂载项目代码(开发环境热更新)
# - ./public:/var/www/html/public # 如果需要分离公开目录
restart: unless-stopped
networks:
- app-network
# 2. Nginx 服务(作为 Web 服务器)
nginx:
image: nginx:alpine
container_name: my-nginx
ports:
- "8080:80" # 将宿主机 8080 映射到容器 80
volumes:
- ./:/var/www/html
- ./docker/nginx.conf:/etc/nginx/conf.d/default.conf # 自定义 Nginx 配置
depends_on:
- php
restart: unless-stopped
networks:
- app-network
# 3. 数据库(可选,根据项目需要)
mysql:
image: mysql:8.0
container_name: my-mysql
environment:
MYSQL_DATABASE: your_database
MYSQL_USER: user
MYSQL_PASSWORD: password
MYSQL_ROOT_PASSWORD: root_password
ports:
- "3306:3306"
volumes:
- mysql_data:/var/lib/mysql
restart: unless-stopped
networks:
- app-network
# 网络和卷定义
networks:
app-network:
driver: bridge
volumes:
mysql_data:
第五步:创建 Nginx 配置文件
在项目根目录下创建 docker/nginx.conf 文件:
server {
listen 80;
server_name localhost;
root /var/www/html/public; # 根据你的项目入口调整(Laravel 是 public)
index index.php index.html;
location / {
try_files $uri $uri/ /index.php?$query_string;
}
location ~ \.php$ {
fastcgi_pass php:9000; # 这里的 "php" 对应 docker-compose 中的服务名
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-compose ps # 查看日志 docker-compose logs -f php docker-compose logs -f nginx
访问 http://localhost:8080 即可看到你的 PHP 项目。
常见问题与优化
生产环境注意事项
- 不要将
.env文件放入镜像,使用 Docker 环境变量或.env挂载。 - 使用
docker-compose的env_file或environment传递敏感信息。 - 将 Nginx 的
error.log和access.log挂载到宿主机持久化。
性能优化
- PHP 镜像选择
-alpine版本(体积小)。 - 使用
--no-dev安装 Composer 依赖。 - 添加 OpCache 扩展并开启 JIT:
RUN docker-php-ext-install opcache \
&& echo "opcache.enable=1" >> /usr/local/etc/php/conf.d/opcache.ini \
&& echo "opcache.jit=1235" >> /usr/local/etc/php/conf.d/opcache.ini
调试技巧
- 如果想看 PHP 错误日志:
docker exec -it my-php-app tail -f /var/log/php_error.log - 进入容器执行命令:
docker exec -it my-php-app /bin/bash - 查看容器 IP:
docker inspect my-php-app | grep IPAddress
- 准备 Dockerfile → 定义 PHP 环境。
- 准备 docker-compose.yml → 定义服务(PHP + Nginx + 数据库)。
- 准备 Nginx 配置 → 让 Nginx 能转译 PHP 请求到
php:9000。 - 运行
docker-compose up -d→ 一键启动。 - 访问
http://localhost:8080→ 查看项目。
如果需要更具体的示例(比如针对某个框架),请告诉我框架名称(如 Laravel 11、ThinkPHP 8 等),我可以提供对应的优化配置。
版权声明: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直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播