我看过很多关于如何使用 docker 构建应用程序的教程,大多数时候 Dockerfile 会复制 package.json、package-lock.json,然后运行 install,最后复制应用程序的其余部分。
Dockerfile 在应用程序的其余部分之前复制 package.json、package-lock.json 的示例
FROM node:12.18.2 as build
ARG REACT_APP_SERVICES_HOST=/services/m
WORKDIR /app
COPY ./package.json /app/package.json
COPY ./package-lock.json /app/package-lock.json
RUN yarn install
COPY . .
RUN yarn build
FROM nginx
COPY ./nginx/nginx.conf /etc/nginx/conf.d/default.conf
COPY --from=build /app/build /usr/share/nginx/html
Run Code Online (Sandbox Code Playgroud)
这让我触发了为什么采用这种方法而不是复制整个应用程序然后运行安装。如果不想复制 node_modules 文件夹,只需在 .dockerignore 文件中添加该文件夹即可解决此问题。或者这是按此顺序执行时被阻止的另一个问题。
这是由于 Docker 层缓存而完成的。docker build如果在复制的文件均未更改时运行,则只会从缓存中读取图像层。如果COPY文件发生更改,则图像中该文件之后的所有图层都将被重建。
RUN yarn install这是一个昂贵的操作,当项目中的任何随机源文件发生更改时,我们不希望需要再次执行它。这样,只有在package.json或package-lock.json文件发生更改时才会重新执行。
| 归档时间: |
|
| 查看次数: |
2849 次 |
| 最近记录: |