1

假设我们有这个:

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
4

2 回答 2

1

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

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

不是缓存“无效”,而是根本没有缓存。从 docker 的角度来看,它们完全是不同的图像。

于 2020-01-21T09:21:56.257 回答
1

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

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

于 2020-01-21T09:36:27.877 回答