你好怎么把php构建后的vendor 添加到缓存 docker镜像构建 判断composer.json是否有变化 没变化把之前的vendor copy到镜像?
在阿里云云效中,你可以通过自定义 Dockerfile 的方式实现在构建镜像时判断 composer.json
文件是否有变化,如果没有变化,则将之前的 vendor
目录从缓存中复制到镜像中。具体实现步骤如下:
在项目的构建设置中,选择 “高级设置” -> “构建脚本部分“,选择”Dockerfile“ 的类型,创建你所需的 Dockerfile。
在 Dockerfile 中添加以下代码,实现检查 composer.json
文件是否有变化,并从缓存中复制 vendor
目录的逻辑。
# 设置工作目录和复制项目文件
WORKDIR /app
COPY . .
# 判断composer.json是否有变化
RUN if [ "$(md5sum composer.json)" != "$(md5sum -)" ]; then \
composer install --no-dev --prefer-dist --optimize-autoloader ; \
fi;
# 将vendor目录从缓存中复制到镜像中
COPY --from=composer:latest /usr/bin/composer /usr/bin/composer
COPY --from=composer:latest /app/vendor/ /app/vendor/
WORKDIR
、复制项目文件的目录和 composer install
命令的参数等。推荐您把php构建和镜像构建放在一个任务中,这样他们共享工作区,在一个工作目录里工作:php的代码库根目录。这样构建产物可以直接COPY ,此回答整理自钉群“云效开发者交流群6群”
您可以按照以下步骤来实现将 PHP 构建后的 vendor 添加到缓存 Docker 镜像构建,同时判断 composer.json 是否有变化,没有变化则将之前的 vendor 复制到镜像:
创建一个 Dockerfile 文件,用于构建 Docker 镜像: FROM php:7.4-apache
RUN docker-php-ext-install mysqli pdo pdo_mysql
WORKDIR /var/www/html
COPY . .
RUN composer install
RUN cp -r ./vendor /var/cache/myapp/vendor 创建一个 Docker Compose 文件,用于启动 PHP 应用程序的 Docker 容器: version: '3' services: web: build: . ports: - "80:80" volumes: - ./src:/var/www/html - /var/cache/myapp/vendor:/var/www/html/vendor 在 Dockerfile 中添加判断 composer.json 是否有变化的逻辑,如果没有变化则将之前的 vendor 复制到镜像中: FROM php:7.4-apache
RUN docker-php-ext-install mysqli pdo pdo_mysql
WORKDIR /var/www/html
COPY . .
RUN md5sum ./composer.json > /tmp/composer.json.md5 RUN if diff /tmp/composer.json.md5 /var/cache/myapp/composer.json.md5; then \n cp -r /var/cache/myapp/vendor ./vendor; \nelse \n composer install; \n md5sum ./composer.json > /var/cache/myapp/composer.json.md5; \n cp -r ./vendor /var/cache/myapp/vendor; \nfi
RUN cp -r ./vendor /var/cache/myapp/vendor 在 Docker Compose 文件中将 /var/cache/myapp/vendor 目录挂载到容器的 /var/www/html/vendor 目录中: version: '3' services: web: build: . ports: - "80:80" volumes: - ./src:/var/www/html - /var/cache/myapp/vendor:/var/www/html/vendor 这样,当您构建 Docker 镜像时,Docker 会自动判断 composer.json 是否有变化,如果没有变化就会将之前缓存的 vendor 复制到镜像中,从而加快构建速度。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
云效,企业级一站式研发协同平台,数十万企业都在用。支持公共云、专有云和混合云多种部署形态,通过云原生新技术和研发新模式,助力创新创业和数字化转型企业快速实现研发敏捷和组织敏捷,打造“双敏”组织,实现多倍效能提升。