首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何加速Docker构建

如何加速Docker构建
EN

Stack Overflow用户
提问于 2017-09-14 23:08:11
回答 2查看 10.5K关注 0票数 10

我正在尝试为我正在处理的项目创建一个Dockerfile。通过aptpip安装所有必需的软件包需要几分钟时间。既然所需的包不会改变,有没有办法让我跳到需要改变的步骤?

我在OS上运行Docker CE (版本17.06.2-ce-mac27)。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-09-14 23:27:49

是的你可以。创建两个镜像

Dockerfile-base

代码语言:javascript
运行
复制
FROM python:3.6
RUN pip install selenium

然后使用下面的代码进行构建

代码语言:javascript
运行
复制
docker build -f Dockerfile-base -t base .

文档文件

代码语言:javascript
运行
复制
FROM base
COPY . .

所以你不会重建基地。并继续处理主Dockerfile。还有其他可能的解决方案,比如部署本地Nexus package manager并使用它在本地缓存包。但是对于开发人员机器来说,这太费力了

票数 15
EN

Stack Overflow用户

发布于 2017-12-14 18:04:21

如果使用docker缓存,则仅当图像的每一层已更改或其上的层已更改时,才会重建图像的每一层。

代码语言:javascript
运行
复制
FROM alpine:latest          # First layer
RUN apk add git gcc         # Second layer
RUN apk add another-package # Third layer

如果更改了第一层或第二层(例如,将openssl添加到第二行),则将在不使用缓存的情况下重新构建第二层和第三层。

但如果只更改了第三层,则只有该层需要重建,而第一层和第二层是从缓存构建的。

因此,有时你可以将所有应该很少构建的内容移动到文件的顶部,然后让重建的内容通常在其自己的层中进一步向下(即使更多的层增加了图像大小)。

如果你更愿意将它移动到多个图像中,你绝对可以按照Tarun上面说的做。如果您只希望将数据从一个镜像移动到另一个镜像(即,未安装软件包等),则可以签入multi-stage builds,它允许您在单个文件中定义多个镜像,并允许它们从文件中先前构建的镜像中复制数据。

要获得有关构建缓存如何工作的更多信息,请查看docs

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46222624

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档