From 5958895f28a14560bc68b4148f5c0d2fb3add6c9 Mon Sep 17 00:00:00 2001 From: suguo <25950955@qq.com> Date: Fri, 14 Feb 2025 16:02:42 +0800 Subject: [PATCH] =?UTF-8?q?=E9=95=9C=E5=83=8F=E8=B0=83=E6=95=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Dockerfile | 148 +++++++++++------------------------------------------ 1 file changed, 30 insertions(+), 118 deletions(-) diff --git a/Dockerfile b/Dockerfile index cc30336..2dffaad 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,126 +1,38 @@ -# 使用官方镜像并配置国内加速 -FROM php:8.2-fpm +# 使用官方CLI镜像并配置阿里云加速 +FROM php:8.2-cli -# 根据镜像类型自动选择包管理工具 -RUN set -eux; \ - # 检测是否是Alpine - if [ -f /etc/alpine-release ]; then \ - sed -i 's/dl-cdn.alpinelinux.org/mirrors.aliyun.com/g' /etc/apk/repositories; \ - apk add --no-cache \ - git \ - zip \ - unzip \ - libzip-dev \ - libpng-dev \ - oniguruma-dev \ - libxml2-dev; \ - else \ - # Debian系处理 - sed -i 's/deb.debian.org/mirrors.aliyun.com/g' /etc/apt/sources.list; \ - sed -i 's/security.debian.org/mirrors.aliyun.com/g' /etc/apt/sources.list; \ - apt-get update && apt-get install -y --no-install-recommends \ - git \ - zip \ - unzip \ - libzip-dev \ - libpng-dev \ - libonig-dev \ - libxml2-dev; \ - apt-get clean; \ - rm -rf /var/lib/apt/lists/*; \ - fi +# 配置系统源(Debian) +RUN sed -i 's/deb.debian.org/mirrors.aliyun.com/g' /etc/apt/sources.list \ + && sed -i 's/security.debian.org/mirrors.aliyun.com/g' /etc/apt/sources.list -# 公共安装步骤 -RUN docker-php-ext-install pdo_mysql mbstring bcmath gd zip - -# 配置Composer国内镜像 -COPY --from=composer:latest /usr/bin/composer /usr/bin/composer -RUN composer config -g repo.packagist composer https://mirrors.aliyun.com/composer/ - -WORKDIR /var/www - -# 先复制依赖文件利用缓存 -COPY composer.json composer.lock ./ - -# 安装生产依赖(不安装dev依赖) -RUN composer install --no-dev --optimize-autoloader --no-scripts - -# 复制项目文件 -COPY . . - -# 设置存储目录权限 -RUN chown -R www-data:www-data storage -RUN chmod -R 775 storage - -# 多阶段构建Nginx -FROM nginx:alpine -COPY --from=0 /var/www /var/www -COPY .docker/nginx.conf /etc/nginx/conf.d/default.conf - -EXPOSE 80 - -# 直接启用所需扩展(该镜像已预装大部分扩展) -RUN docker-php-ext-enable \ - pdo_mysql \ - mbstring \ - exif \ - pcntl \ - bcmath \ - gd \ - sockets \ - zip - -# 使用并行编译(-j参数) -RUN docker-php-ext-install -j$(nproc) pdo_mysql - -# 优先使用pecl安装(部分扩展有预编译包) -RUN pecl install -o -f redis \ - && docker-php-ext-enable redis - -# 禁用Xdebug等开发扩展 -RUN if [ "$APP_ENV" = "production" ]; then \ - pecl uninstall xdebug \ - && rm -rf /tmp/pear; \ - fi - -# 第一阶段:构建依赖 -FROM php:8.2-fpm as builder - -# 使用国内composer镜像 -RUN composer config -g repo.packagist composer https://mirrors.aliyun.com/composer/ - -COPY composer.json composer.lock ./ -RUN composer install --no-dev --no-scripts --optimize-autoloader - -# 第二阶段:生产镜像 -FROM php:8.2-fpm - -# 只复制必要文件 -COPY --from=builder /app/vendor /app/vendor -COPY . /app - -# 使用预编译的扩展(需自行构建) -# COPY ./docker/php/extensions/* /usr/local/lib/php/extensions/no-debug-non-zts-20210902/ - -# 使用Alpine系镜像 -FROM php:8.2-fpm-alpine - -# 配置Alpine镜像源 -RUN sed -i 's/dl-cdn.alpinelinux.org/mirrors.aliyun.com/g' /etc/apk/repositories - -# 使用apk安装依赖 -RUN apk add --no-cache \ +# 安装基础依赖(按需精简) +RUN apt-get update && apt-get install -y --no-install-recommends \ git \ zip \ unzip \ libzip-dev \ - libpng-dev \ - oniguruma-dev \ - libxml2-dev + && docker-php-ext-install zip pcntl \ + && apt-get clean \ + && rm -rf /var/lib/apt/lists/* -# 安装PHP扩展 -RUN docker-php-ext-install pdo_mysql mbstring bcmath gd zip - -# 使用国内composer源 +# 安装Composer(阿里云镜像) COPY --from=composer:latest /usr/bin/composer /usr/bin/composer -RUN composer config -g repo.packagist composer https://mirrors.aliyun.com/composer/ \ No newline at end of file +RUN composer config -g repo.packagist composer https://mirrors.aliyun.com/composer/ + +# 设置工作目录 +WORKDIR /usr/src/app + +# 先复制依赖文件(利用Docker缓存) +COPY composer.json composer.lock ./ + +# 安装生产依赖 +RUN composer install --no-dev --optimize-autoloader + +# 复制全部项目文件 +COPY . . + +# 设置执行权限(如有需要) +RUN chmod +x your-script.php + +# 运行入口脚本 +CMD ["php", "./your-script.php"] \ No newline at end of file