开发者社区 > 云效DevOps > 正文

你好怎么把php构建后的vendor 添加到缓存 docker镜像构建 判断composer.jso

你好怎么把php构建后的vendor 添加到缓存 docker镜像构建 判断composer.json是否有变化 没变化把之前的vendor copy到镜像?

展开
收起
真的很搞笑 2023-04-17 23:20:33 371 0
3 条回答
写回答
取消 提交回答
  • 公众号:网络技术联盟站,InfoQ签约作者,阿里云社区签约作者,华为云 云享专家,BOSS直聘 创作王者,腾讯课堂创作领航员,博客+论坛:https://www.wljslmz.cn,工程师导航:https://www.wljslmz.com

    在阿里云云效中,你可以通过自定义 Dockerfile 的方式实现在构建镜像时判断 composer.json 文件是否有变化,如果没有变化,则将之前的 vendor 目录从缓存中复制到镜像中。具体实现步骤如下:

    1. 在项目的构建设置中,选择 “高级设置” -> “构建脚本部分“,选择”Dockerfile“ 的类型,创建你所需的 Dockerfile。

    2. 在 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/
    
    1. 在 Dockerfile 中,你可以根据需要自行修改 WORKDIR、复制项目文件的目录和 composer install 命令的参数等。
    2023-04-30 11:21:54
    赞同 展开评论 打赏
  • 推荐您把php构建和镜像构建放在一个任务中,这样他们共享工作区,在一个工作目录里工作:php的代码库根目录。这样构建产物可以直接COPY a086b6ff01b2c991cc6c48bd8a0c1fc4.png ,此回答整理自钉群“云效开发者交流群6群”

    2023-04-18 21:25:22
    赞同 展开评论 打赏
  • 随心分享,欢迎友善交流讨论:)

    您可以按照以下步骤来实现将 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

    复制代码和 composer.json 文件

    COPY . .

    安装依赖包

    RUN composer install

    将 vendor 复制到缓存目录中

    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

    复制代码和 composer.json 文件

    COPY . .

    判断 composer.json 是否有变化

    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

    将 vendor 复制到缓存目录中

    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 复制到镜像中,从而加快构建速度。

    2023-04-18 17:30:00
    赞同 展开评论 打赏

云效,企业级一站式研发协同平台,数十万企业都在用。支持公共云、专有云和混合云多种部署形态,通过云原生新技术和研发新模式,助力创新创业和数字化转型企业快速实现研发敏捷和组织敏捷,打造“双敏”组织,实现多倍效能提升。

相关电子书

更多
应用 Docker 进行持续交付:用技术改变交付路程 立即下载
从Docker到容器服务 立即下载
Docker@Alibaba——超大规模Docker化的实战经验 立即下载