告诉Docker构建忽略RUN命令顺序的更改

时间:2020-01-21 09:17:17

标签: docker dockerfile docker-build docker-layer

说我们有这个

RUN go get 'github.com/foo/one'
RUN go get 'github.com/foo/two'
RUN go get 'github.com/foo/three'

然后我们更改顺序:

RUN go get 'github.com/foo/two'
RUN go get 'github.com/foo/three'
RUN go get 'github.com/foo/one'

缓存将完全失效。有没有办法告诉docker build依赖关系的顺序无关紧要。这样的语法:

PARALLEL START
RUN go get 'github.com/foo/two'
RUN go get 'github.com/foo/three'
RUN go get 'github.com/foo/one'
PARALLEL END

2 个答案:

答案 0 :(得分:1)

由于构建图像时图层系统的工作原理,这是不可能的。

通过在现有内容之上添加内容来构建图像,因此,如果更改顺序,则将更改结构,因此将构建不同的图像。

并不是说缓存是“无效的”,而是根本没有缓存。从码头工人的角度来看,它们根本就是不同的图像。

答案 1 :(得分:1)

Docker使用分层架构来制作映像。假设您的文件包含以下命令:命令1命令2命令3

泊坞窗将执行命令1并创建一个layer1,然后在该层之上执行其他命令以分别添加第2层和第3层。您需要了解这一点,泊坞窗通过使用此模式来利用缓存过程。如果更改命令顺序,它将从更改命令的位置重新创建图层。