ARG BASE_IMAGE=ulthon/ulthon_admin-base:latest FROM ${BASE_IMAGE} # XHProf 扩展(若基础镜像已含则跳过) RUN install-php-extensions xhprof # 设置工作目录 WORKDIR /var/www/html # 预先拷贝 composer 文件并安装依赖,利用 Docker 缓存 COPY composer.json composer.lock /var/www/html/ RUN composer install --no-dev --no-interaction --no-scripts --no-autoloader # 将当前目录下的文件拷贝到工作目录 COPY . /var/www/html # B-route: build context 为仓库根,模式配置在 source/stack//source/docker/ RUN rm -rf /var/www/html/source/docker && ln -sf /var/www/html/source/stack/docker-serve/source/docker /var/www/html/source/docker # 生成自动加载文件 RUN composer dump-autoload --optimize --no-dev --classmap-authoritative # XHProf: 安装 php-profiler 到独立目录 RUN mkdir -p /opt/xhprof \ && cd /opt/xhprof \ && composer require perftools/php-profiler --no-dev # XHProf: 复制采集器 bootstrap(全局配置,不受 bind mount 影响) COPY source/docker/xhprof-bootstrap.php /opt/xhprof/xhprof-bootstrap.php # XHProf: 配置 auto_prepend_file(zzz 前缀确保最后加载) RUN echo 'auto_prepend_file = /opt/xhprof/xhprof-bootstrap.php' > /usr/local/etc/php/conf.d/zzz-xhprof.ini VOLUME /var/www/html/runtime VOLUME /var/www/html/public/storage VOLUME /var/www/html/public/build VOLUME /var/www/html/storage # 挂载主目录,也可以选择直接挂载主目录,可以把上面的几个指定的目录删掉 # VOLUME ["/var/www/html"] # 暴露 Nginx 端口 EXPOSE 8000 # B-route bind mount 模式:ENTRYPOINT 必须用完整路径(build 期 symlink 被 bind mount 覆盖) RUN chmod +x /var/www/html/source/stack/docker-serve/source/docker/run.sh # 启动 Nginx PHP 然后阻塞 ENTRYPOINT ["/bin/bash", "/var/www/html/source/stack/docker-serve/source/docker/run.sh"] CMD ["server"]