当前位置: 首页 > 知识库问答 >
问题:

前端 - jenkins + dockerfile构建如何利用docker缓存提升构建速度?

蔚承天
2023-05-28

笔者想通过jenkins实现一个简单的自动化部署,目前我的操作如下

  1. 在工程文件下面新建了dockerfile文件,通过多阶段构建来利用缓存提高构建速度
  2. 在jenkins构建时编写了脚本,主要操作就是删除上一次构建的容器和镜像文件,重写构建一个新的镜像和容器

但是有一个问题就是删除了上一次的镜像和容器docker的缓存是不是就是不在了,无法利用缓存来提高构建速度,如果我想利用dockerfile的缓存提高构建速度,应该怎么去实现呢?

共有1个答案

叶淇
2023-05-28

多阶段构建并不一定能提高构建速度,多阶段的目的更多的是为了降低最终打包的镜像大小。是不是利用了缓存,和阶段构建没什么关系,和Dockerfile的指令有关系。

镜像越小,推送镜像到镜像仓库的时候,速度越快 :)

可以保留一个历史版本的镜像,缓存就还在,速度会快很多。

还可以尝试下面几个方法:

  1. 如果镜像中有安装第三方包,可以提前把这些所需要的包,打包成一个基础镜像。然后再构建app镜像的时候,依赖这个基础镜像。
  2. 减少镜像层数,尽量把多个命令写成一行,让它们作为一个镜像层。
  3. Dockerfile中,如果指令没有修改,下一次构建的时候会直接使用缓存的镜像层,修改了就会生成新的镜像层。还有就是如果第一行指令变了,后面所有的指令就不会再走缓存。 所以一般情况下固定不变的指令写在上面,会经常变的指令写在下面。
  4. 可以多尝试构建几次,观察一下每次构建的时候时间花在哪里,然后看情况优化。
 类似资料:
  • 问题内容: 我目前正在为我的应用程序开发Node后端。在对其进行Docker化(docker build。)时,最长的阶段是。该指令在每个小的服务器代码更改上运行,通过使开发人员每次都等待构建完成来影响生产率。 我发现在应用程序代码所在的位置运行npm install并使用ADD指令将node_modules添加到容器中可以解决此问题,但这远非最佳实践。这有点破坏了将其Docker化的整个想法,并

  • 问题内容: 我想优化我的Dockerfile。我希望将缓存文件保留在磁盘中。但是,我发现当我运行它时,总是尝试从网络获取每个文件。 我希望在构建期间共享我的缓存目录(例如/ var / cache / yum / x86_64 / 6)。但是,它仅适用于。 有什么建议吗?(在此示例中,仅安装了1 rpm,在实际情况下,我需要安装数百rpm) 我的Dockerfile草案 在第二次,我想建立一个相似

  • 本文向大家介绍Docker如何使用Dockerfile构建镜像,包括了Docker如何使用Dockerfile构建镜像的使用技巧和注意事项,需要的朋友参考一下 Dockfile是一种被Docker程序解释的脚本,Dockerfile由一条一条的指令组成,每条指令对应Linux下面的一条命令。Docker程序将这些Dockerfile指令翻译真正的Linux命令。Dockerfile有自己书写格式和

  • 问题内容: 我目前正在为我的应用程序开发Node后端。在对其进行docker化(docker build)时,最长的阶段是。该指令在每个小的服务器代码更改上运行,通过使开发人员每次等待构建完成来影响生产率。 我发现在应用程序代码所在的位置运行npm install并使用ADD指令将node_modules添加到容器中可以解决此问题,但这远非最佳实践。这有点破坏了将其Docker化的整个想法,并且使

  • 问题内容: 构建Docker映像可以在桌面上正常工作。安装Node.js NPM依赖项照常工作。但是,当使用在公司代理后面托管的持续集成服务器(例如Jenkins)时,构建Docker映像将失败。 Node.js NPM依赖关系 在构建Node.js pacakges时,如果在克隆GIT依赖项时无法连接到GIT ,则命令 npm install 失败。 Java Maven,Ruby,具有依赖关系

  • 下面我们以microservice-discovery-eureka项目为例,我们首先执行 mvn clean package # 使用Maven打包项目 将项目构建成jar包:microservice-discovery-eureka-0.0.1-SNAPSHOT.jar ,那幺如果我们想要启动项目则只需要在microservice-discovery-eureka-0.0.1-SNAPSHOT