You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何缩小Laravel 7.4项目的Docker镜像体积?

Laravel 7.4 Docker镜像体积优化方案

一、使用多阶段构建(核心优化手段)

多阶段构建能彻底分离构建环境与运行环境,仅将运行必需的文件复制到最终镜像,这是缩小体积最有效的方法。以下是适配Laravel 7.4的优化Dockerfile示例:

# 阶段1:构建环境(用于安装依赖、编译代码)
FROM php:7.4-fpm AS builder

# 安装构建所需系统依赖与PHP扩展
RUN apt-get update && apt-get install -y \
    git \
    zip \
    unzip \
    libzip-dev \
    libpng-dev \
    libjpeg-dev \
    libfreetype6-dev \
    && docker-php-ext-configure gd --with-freetype --with-jpeg \
    && docker-php-ext-install gd pdo_mysql zip opcache \
    && apt-get clean && rm -rf /var/lib/apt/lists/*

# 安装Composer
COPY --from=composer:latest /usr/bin/composer /usr/bin/composer

WORKDIR /var/www/html

# 复制项目文件与Composer配置
COPY . .

# 仅安装生产环境依赖,优化自动加载器
RUN composer install --no-dev --optimize-autoloader --no-interaction --no-progress \
    && composer clear-cache

# 阶段2:运行环境(轻量镜像,仅保留运行必需组件)
FROM php:7.4-fpm-alpine

# 安装运行时依赖(仅保留必要的系统库与PHP扩展)
RUN apk add --no-cache \
    libzip \
    libpng \
    libjpeg-turbo \
    freetype \
    && docker-php-ext-configure gd --with-freetype --with-jpeg \
    && docker-php-ext-install gd pdo_mysql zip opcache \
    && rm -rf /var/cache/apk/*

WORKDIR /var/www/html

# 从构建阶段复制仅运行所需的文件
COPY --from=builder /var/www/html /var/www/html

# 设置Laravel所需的文件权限
RUN chown -R www-data:www-data /var/www/html/storage /var/www/html/bootstrap/cache

EXPOSE 9000

CMD ["php-fpm"]

二、其他关键优化措施

  • 移除冗余依赖与文件

    • 构建依赖时使用composer install --no-dev排除开发工具(如PHPUnit、Laravel Dusk)
    • 不要复制项目中的.git、tests、node_modules(前端资源已编译完成时)等无关目录
    • 每次安装系统依赖后立即清理缓存(如apt-get clean、rm -rf /var/lib/apt/lists/*)
  • 使用轻量基础镜像

    • 替换基于Debian的php:7.4-fpm为php:7.4-fpm-alpine,Alpine镜像基于BusyBox,体积仅为前者的1/5左右
    • 若需搭配Nginx,使用nginx:alpine替代标准Nginx镜像
  • 合并命令减少镜像层

    • 将多个RUN指令合并为一个,减少镜像层数的同时避免缓存冗余,示例见上述Dockerfile中的依赖安装步骤
  • 前端资源单独构建

    • 若项目包含Vue/React等前端代码,新增前端构建阶段:
      # 前端构建阶段
      FROM node:16-alpine AS frontend-builder
      WORKDIR /var/www/html
      COPY package*.json ./
      RUN npm install --production
      COPY . .
      RUN npm run prod
      
    • 再将编译后的public目录复制到最终镜像中

内容的提问来源于stack exchange,提问作者NamAvar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.28 15:56:17