Docker构建不使用缓存

时间:2020-05-25 02:56:46

标签: docker

我跑步时

docker build -f docker/webpack.docker services/webpack --build-arg env=production

连续两次,Docker每次都从第一个RUNCOPY使用缓存)开始构建我的映像。

FROM node:lts
ARG env=production
ENV NODE_ENV=$env

WORKDIR /app

COPY package.json yarn.lock ./

RUN yarn install --frozen-lockfile --production=false --non-interactive

COPY . .

RUN node --max-old-space-size=20000 node_modules/.bin/svg2fonts icons -o assets/markons -b mrkn -f markons -n Markons
RUN node --max-old-space-size=20000 node_modules/.bin/webpack --progress

如何获取它来缓存这些RUN

输出如下:

Sending build context to Docker daemon   3.37MB
Step 1/9 : FROM node:lts
 ---> 0c601cba9f11
Step 2/9 : ARG env=production
 ---> Using cache
 ---> dd38b2167c75
Step 3/9 : ENV NODE_ENV=$env
 ---> Using cache
 ---> 800f5afd416c
Step 4/9 : WORKDIR /app
 ---> Using cache
 ---> d15b93dce11d
Step 5/9 : COPY package.json yarn.lock ./
 ---> Using cache
 ---> a049dd1609a8
Step 6/9 : RUN yarn install --frozen-lockfile --production=false --non-interactive
 ---> Using cache
 ---> d5e51b0d556c
Step 7/9 : COPY . .
 ---> 92990e326d4b
Step 8/9 : RUN node --max-old-space-size=20000 node_modules/.bin/svg2fonts icons -o assets/markons -b mrkn -f markons -n Markons
 ---> Running in a23878db7b0e
Wrote assets/markons/markons.css
Wrote assets/markons/markons.js
Wrote assets/markons/markons.html
Wrote assets/markons/markons-chars.json
Wrote assets/markons/markons.svg
Wrote assets/markons/markons.ttf
Wrote assets/markons/markons.woff
Wrote assets/markons/markons.woff2
Wrote assets/markons/markons.eot
Removing intermediate container a23878db7b0e
 ---> 3bce79d0ecf0
Step 9/9 : RUN node --max-old-space-size=20000 node_modules/.bin/webpack --progress
 ---> Running in b6d460488950
<s> [webpack.Progress] 0% compiling
...

1 个答案:

答案 0 :(得分:1)

请参见description

如果第一个COPY命令上所有外部文件的内容均 同样,将使用图层缓存和所有后续命令 直到下一个ADD或COPY命令将使用图层缓存。

但是,如果一个或多个外部文件的内容不同, 然后将在不使用该层的情况下执行所有后续命令 缓存。

因此,每次更改内容时,将执行最后两个RUN,而不会缓存。目前有no way个控件可以控制缓存。也许指定卷是更好的选择?