翼度科技»论坛 云主机 服务器技术 查看内容

在没有Docker缓存的情况下构建镜像的方法分享

9

主题

9

帖子

27

积分

新手上路

Rank: 1

积分
27
尽可能快地构建 Docker 镜像至关重要。构建映像的速度越快,测试并将其部署到生产环境的速度就越快。Docker 的构建缓存是通过重用以前构建的层来加速构建的好方法。

Docker 缓存的工作原理

Docker 构建缓存最好被视为从 Dockerfile 顶部到底部的堆栈。给定这样的 Dockerfile:
  1. FROM node:16
  2. RUN apt-get update && apt-get install -y curl
  3. WORKDIR /app
  4. COPY package.json package-lock.json /app/
  5. RUN npm install
  6. COPY . .
  7. RUN npm build
复制代码
Dockerfile中的每一行都是Docker镜像构建过程中的一步,会在镜像中创建一个层。这些层从上到下堆叠,形成最终的Docker镜像。
这种继承关系构成了Docker层缓存的骨架。当你使用
  1. docker build
复制代码
命令构建镜像时,Docker会按照从上到下的顺序执行每一步。在执行每个步骤时,它会检查是否已经有了该步骤的层。如果该步骤自上次构建以来没有改变,缓存中就已经存在该层,不需要重新构建。
如果该步骤已经改变(例如我们在
  1. COPY . .
复制代码
中更改了源代码),层缓存中就没有匹配项,需要重新构建该步骤。
如果你已经清除了本地Docker层缓存,该步骤也可能不在缓存中存在。
  1. docker build
复制代码
过程中使用层缓存,是为什么步骤的顺序非常重要。如果你更改了某个步骤,所有位于该步骤下方的步骤都需要重新构建。

使用以下命令构建没有缓存的镜像--no-cache

但是,有时,您想要构建没有缓存的图像。您可能正在调试构建问题并希望从头开始。或者您可能想强制升级依赖项。无论出于何种原因,您都可以使用该选项构建没有缓存的图像
  1. --no-cache
复制代码
  1. docker build --no-cache .
复制代码
该标志告诉 Docker 守护进程在 a 期间跳过缓存
  1. docker build
复制代码
并运行 Dockerfile 中的每个步骤。它会导致构建速度变慢,但会确保您运行每一步。指定
  1. --no-cache
复制代码
有助于调试构建问题。您还可以使用它来强制升级依赖项,就像
  1. curl
复制代码
上面一样
  1. apt-get install
复制代码

该参数告诉Docker守护进程在
  1. docker build
复制代码
期间跳过缓存,并运行Dockerfile中的每个步骤。这会导致构建速度较慢,但可以确保运行每个步骤。指定
  1. --no-cache
复制代码
对于调试构建问题非常有帮助。你也可以使用它来强制升级依赖项,例如我们在上面的
  1. apt-get install -y curl
复制代码


在特定位置使使缓存失效

有时候你需要在
  1. Dockerfile
复制代码
的特定位置使缓存失效。例如,你可能想在
  1. npm install
复制代码
步骤之后使缓存失效,以便调试
  1. npm build
复制代码
步骤。你可以使用ARG指令来实现这个技巧。我们可以在
  1. npm build
复制代码
命令之前在Dockerfile中添加一个
  1. ARG STOP=1
复制代码
步骤。当我们更改它的值时,这会导致缓存在该行失效。
  1. ...
  2. COPY . .
  3. ARG STOP=1
  4. RUN npm build
复制代码
现在,当你运行
  1. docker build
复制代码
时,你会发现在构建步骤运行之前,缓存会被失效。你可以通过更改值再次使其失效。你可以在
  1. Dockerfile
复制代码
内部更改它,也可以在调用
  1. docker build
复制代码
时使用构建参数来更改它。
  1. docker build --build-arg STOP=2 .
复制代码
小结

Docker构建缓存是通过重用以前构建的层来加速构建的一种很好的方式。尽可能地优化使用层缓存最终会加速Docker构建。
但有时候,你想在没有Docker缓存的情况下构建镜像。使用--no-cache选项将强制Docker守护进程在构建过程中运行Dockerfile中的每个步骤。它有助于调试构建问题或强制升级操作系统依赖项。
Docker构建缓存对于构建Docker镜像至关重要。还有其他基本技巧可以使你的Docker构建速度更快。
到此这篇关于在没有Docker缓存的情况下构建镜像的方法介绍的文章就介绍到这了,更多相关Docker缓存构建镜像内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

来源:https://www.jb51.net/server/292600e1b.htm
免责声明:由于采集信息均来自互联网,如果侵犯了您的权益,请联系我们【E-Mail:cb@itdo.tech】 我们会及时删除侵权内容,谢谢合作!

举报 回复 使用道具