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

如何将Laravel项目的CircleCI配置转换为可正常运行的Dockerfile

Laravel项目Docker配置转换方案

原有配置说明

你现有的CircleCI配置核心是搭建PHP7.3 + Node运行环境,安装Laravel所需的全部扩展,然后执行依赖安装、前端构建、单元测试流程,以下是修正后的可运行Docker配置:


修正后的Dockerfile

# 改用官方PHP7.3 Apache镜像,更适合生产/开发运行,避免CI镜像的冗余依赖
FROM php:7.3-apache

# 安装系统依赖
RUN apt-get update && apt-get install -y --no-install-recommends \
    libpng-dev \
    zlib1g-dev \
    libzip-dev \
    libsqlite3-dev \
    libmagickwand-dev \
    zip \
    unzip \
    curl \
    git \
    nodejs \
    npm \
    # 清理apt缓存,大幅减小镜像体积
    && apt-get clean \
    && rm -rf /var/lib/apt/lists/*

# 安装核心PHP扩展
RUN docker-php-ext-install \
    gd \
    zip \
    bcmath \
    pcntl \
    exif \
    pdo_mysql \
    mysqli
# 安装PECL扩展
RUN pecl install imagick redis \
    && docker-php-ext-enable imagick redis

# 开启Apache rewrite模块,支持Laravel路由规则
RUN a2enmod rewrite

# 导入自定义Apache虚拟主机配置
COPY .docker/vhost.conf /etc/apache2/sites-available/000-default.conf

# 全局安装Composer
RUN curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer

# 设置工作目录
WORKDIR /var/www/html

# 先复制依赖描述文件,利用Docker层缓存,避免每次修改代码都重装依赖
COPY composer.json composer.lock ./
RUN composer install --prefer-dist --no-scripts --no-autoloader -n

COPY package.json package-lock.json ./
RUN npm install

# 复制全部项目代码
COPY . .

# 执行后续构建步骤,对齐CI流程
RUN composer dump-autoload --optimize
RUN npm run production
RUN cp .env.example .env
RUN php artisan key:generate

# 正确设置目录权限,避免不安全的777配置
RUN chown -R www-data:www-data /var/www/html \
    && chmod -R 775 /var/www/html/storage /var/www/html/bootstrap/cache

# 配置入口脚本
COPY docker-entrypoint.sh /usr/local/bin/
RUN chmod +x /usr/local/bin/docker-entrypoint.sh
ENTRYPOINT ["docker-entrypoint.sh"]

# 暴露Web服务端口
EXPOSE 80

配套docker-compose.yml配置

version: "3.8"

services:
  # Laravel主应用服务
  app:
    build: .
    ports:
      - "8000:80"
    volumes:
      # 开发环境挂载本地代码,修改后实时生效
      - ./:/var/www/html
      # 排除依赖目录,避免覆盖容器内安装的依赖
      - /var/www/html/vendor
      - /var/www/html/node_modules
    environment:
      - APP_ENV=local
      - DB_CONNECTION=mysql
      - DB_HOST=db
      - DB_PORT=3306
      - DB_DATABASE=laravel
      - DB_USERNAME=laravel
      - DB_PASSWORD=secret
      - REDIS_HOST=redis
    depends_on:
      - db
      - redis

  # MySQL数据库服务
  db:
    image: mysql:5.7
    ports:
      - "3306:3306"
    environment:
      - MYSQL_DATABASE=laravel
      - MYSQL_USER=laravel
      - MYSQL_PASSWORD=secret
      - MYSQL_ROOT_PASSWORD=root
    volumes:
      - mysql_data:/var/lib/mysql

  # Redis缓存服务
  redis:
    image: redis:alpine
    ports:
      - "6379:6379"
    volumes:
      - redis_data:/data

volumes:
  mysql_data:
  redis_data:

参考docker-entrypoint.sh

#!/bin/bash

# 启动前可选执行数据库迁移
# php artisan migrate --force

# 启动Apache服务
apache2-foreground

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 20:48:01