假设我们有这个:
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
由于构建映像时的图层系统的工作方式,这是不可能的。
映像是通过在现有内容之上添加内容来构建的,因此,如果更改顺序,则会更改结构,从而生成不同的映像。
不是缓存"失效",而是根本没有缓存。从 docker 的角度来看,它们完全是不同的图像。
Docker使用分层架构来制作镜像。假设您的文件包含以下命令:命令 1 命令 2 命令 3
docker 要做的是执行命令 1 并创建一个第 1 层,在该层之上,它将执行其他命令以尊重地添加第 2 层和第 3 层。您需要了解这一点,即使用此模式 docker 会利用缓存过程。如果更改命令顺序,它将从更改顺序的位置重新创建图层。