当前位置:  开发笔记 > 运维 > 正文

将ARG放在Dockerfile的顶部会阻止层重用吗?

如何解决《将ARG放在Dockerfile的顶部会阻止层重用吗?》经验,为你挑选了1个好方法。

如果在Dockerfile顶部声明的ARG发生更改,但其值仅用于Dockerfile末尾附近的RUN命令,Docker是否从头开始重建整个映像,或者是否能够重用中间件在相关的RUN命令之前的图像?

为了更好地利用分层,我应该将我的ARG声明放在Dockerfile的顶部,还是在使用它们的部分之前?

我想我的一部分问题是ARG指令是否生成了一个中间层.



1> 小智..:

如果更改构建参数的值,则该ARG行之后的所有层都将失效.所以我想你应该在使用ARG之前加入它.

就在你需要它之​​前:

 docker build --build-arg TEST_ARG=test .
 Sending build context to Docker daemon 2.048 kB
 Step 1 : FROM ubuntu
 ---> 104bec311bcd
 Step 2 : RUN echo "no arg used"
 ---> Using cache
 ---> 5c29cb363a27
 Step 3 : ARG TEST_ARG
 ---> Using cache
 ---> 73b6080f973b
 Step 4 : RUN echo $TEST_ARG
 ---> 0acd55c24441
 Successfully built 0acd55c24441

在顶部:

docker build --build-arg TEST_ARG=test .
Sending build context to Docker daemon 2.048 kB
Step 1 : FROM ubuntu
 ---> 104bec311bcd
Step 2 : ARG TEST_ARG
---> Using cache
---> b611a1023fe3
Step 3 : RUN echo "no arg used"
---> Running in 63e0f803c6b2
no arg used
---> 592311ccad72
Removing intermediate container 63e0f803c6b2
Step 4 : RUN echo $TEST_ARG
---> Running in 1515aa8702f0
test
---> fc2d850fbbeb
Removing intermediate container 1515aa8702f0
Successfully built fc2d850fbbeb

在第一个例子中,从缓存使用两个层,在第二个例子中,只使用一个层(有趣的是,ARG层本身)来自缓存.

推荐阅读
mobiledu2402851203
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有