在CircleCI中如何为Docker镜像构建缓存Yarn依赖项?

21
我的 yarn install 目前需要大约 5 分钟的时间。我正在尝试找到一种方法来缩短这个过程。
目前在我的 Dockerfile 中,我有以下内容:
COPY package.json yarn.lock node_modules /usr/src/app/
COPY ${YARN_CACHE} /root/.cache/yarn/
WORKDIR /usr/src/app

# We are doing this so that we can make use of layer caching 
# (i.e. most likely yarn deps won't change as often as the app code)
COPY . /usr/src/app

# yarn install
RUN yarn install

在我的圆形文件中,我有以下内容:
  - restore_cache:
     keys:
       # only restores cache if the yarn file is the same
       - yarn-packages-v4-{{ checksum "yarn.lock" }}
  - run: docker pull "xxx.dkr.ecr.us-east-1.amazonaws.com/website:latest"
  - run: docker build --build-arg NODE_ENV=production --build-arg YARN_CACHE=$(yarn cache dir) --force-rm -t xxx.dkr.ecr.us-east-1.amazonaws.com/website:build-${CIRCLE_BUILD_NUM} .

然而,我的yarn安装仍然需要5分钟。我做错了什么吗?
2个回答

10
问题在于yarn cache dir的结果是一个外部文件夹,它在Docker构建中可能不存在或为空。你有几个选择:

4
根据Tom的第一个观点,在同一Docker构建阶段中,在RUN yarn install之前将其放置在任何地方都可以通过缓存所有yarn缓存到卷目录来帮助。
ENV YARN_CACHE_FOLDER=/usr/local/yarn-cache
VOLUME /usr/local/yarn-cache

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接