本文目录导读:

我来提供一个完整的PHP项目Dockerfile示例,包含常用的配置和最佳实践:
基础版本(适用于常见PHP项目)
# 使用官方PHP 8.2版本作为基础镜像
FROM php:8.2-fpm
# 安装系统依赖和PHP扩展
RUN apt-get update && apt-get install -y \
git \
curl \
libpng-dev \
libonig-dev \
libxml2-dev \
zip \
unzip \
&& docker-php-ext-install pdo_mysql mbstring exif pcntl bcmath gd
# 安装Composer
COPY --from=composer:latest /usr/bin/composer /usr/bin/composer
# 设置工作目录
WORKDIR /var/www/html
# 复制项目文件
COPY . .
# 复制自定义配置(可选)
# COPY php.ini /usr/local/etc/php/
# 设置权限(根据需要调整)
RUN chown -R www-data:www-data /var/www/html \
&& chmod -R 755 /var/www/html/storage
# 暴露端口
EXPOSE 9000
# 启动命令
CMD ["php-fpm"]
完整生产版本(包含更多优化)
# 构建阶段
FROM php:8.2-fpm AS builder
# 系统依赖
RUN apt-get update && apt-get install -y \
git \
curl \
libpng-dev \
libonig-dev \
libxml2-dev \
zip \
unzip \
libzip-dev \
libicu-dev \
libpq-dev \
--no-install-recommends
# PHP扩展
RUN docker-php-ext-install \
pdo_mysql \
mbstring \
exif \
pcntl \
bcmath \
gd \
intl \
zip \
opcache
# 安装Redis扩展(可选)
RUN pecl install redis && docker-php-ext-enable redis
# 安装Composer
COPY --from=composer:2.6 /usr/bin/composer /usr/bin/composer
# Node.js(如果前端需要构建)
# FROM node:18-alpine AS node-build
# COPY package*.json ./
# RUN npm ci && npm run build
# 正式运行阶段
FROM php:8.2-fpm
# 基础依赖
RUN apt-get update && apt-get install -y \
curl \
git \
unzip \
libzip-dev \
libicu-dev \
libpq-dev \
--no-install-recommends \
&& docker-php-ext-install \
pdo_mysql \
mbstring \
exif \
pcntl \
bcmath \
gd \
intl \
zip \
opcache
# 配置优化
COPY ./docker/php.ini /usr/local/etc/php/conf.d/php.ini
COPY ./docker/php-fpm.conf /usr/local/etc/php-fpm.d/www.conf
# 设置工作目录
WORKDIR /var/www/html
# 复制项目文件(排除不需要的文件)
COPY --chown=www-data:www-data . .
# 设置目录权限
RUN mkdir -p storage bootstrap/cache \
&& chown -R www-data:www-data storage bootstrap/cache \
&& chown -R www-data:www-data /var/www/html
# 切换到非root用户
USER www-data
# 暴露端口
EXPOSE 9000
# 健康检查(可选)
HEALTHCHECK --interval=30s --timeout=3s \
CMD curl -f http://localhost:9000/ || exit 1
CMD ["php-fpm"]
.dockerignore文件(重要!)
.vscode .idea .git .gitignore .gitlab-ci.yml docker-compose.yml docker-compose.prod.yml Dockerfile .dockerignore application/logs/*.log runtime/*.log storage/*.log vendor node_modules public/storage public/assets/uploads build .env *.md
多阶段构建版本(更高效)
# 阶段1:安装依赖
FROM composer:2.6 AS composer
WORKDIR /app
COPY composer.json composer.lock ./
RUN composer install --no-dev --optimize-autoloader --no-scripts
# 阶段2:最终镜像
FROM php:8.2-fpm
# 安装依赖和扩展
RUN apt-get update && apt-get install -y \
libpq-dev \
libzip-dev \
libicu-dev \
&& docker-php-ext-install pdo pdo_mysql zip
COPY --from=composer /app/vendor /var/www/html/vendor
COPY . /var/www/html
WORKDIR /var/www/html
EXPOSE 9000
CMD ["php-fpm"]
使用示例
构建镜像
docker build -t php-app:latest .
运行容器
docker run -d -p 8080:80 -v $(pwd):/var/www/html php-app:latest
docker-compose配置示例
version: '3.8'
services:
php:
build:
context: .
dockerfile: Dockerfile
volumes:
- ./:/var/www/html
ports:
- "9000:9000"
environment:
- DB_HOST=database
- DB_PORT=3306
networks:
- app-network
nginx:
image: nginx:alpine
ports:
- "80:80"
volumes:
- ./:/var/www/html
- ./docker/nginx.conf:/etc/nginx/conf.d/default.conf
depends_on:
- php
networks:
- app-network
networks:
app-network:
driver: bridge
常用优化技巧
- 使用缓存层:先复制composer.json,然后执行composer install,再复制其他文件
- 多阶段构建:减少最终镜像大小
- 设置非root用户:提高安全性
- 使用.dockerignore:避免不必要的文件复制
- 合理配置缓存:利用Docker层缓存
注意事项
- 根据实际PHP版本需求调整基础镜像
- 根据项目需要安装必要的扩展
- 确保storage和bootstrap/cache目录可写
- 生产环境建议使用多阶段构建
- 定期更新基础镜像获取安全补丁
需要根据你的具体项目需求(如框架、依赖等)调整此Dockerfile。
版权声明: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直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播