是否将ARG放在Dockerfile的顶部,防止层重用?

如果在Dockerfile顶部声明的ARG被更改,但是它的值仅用于靠近Dockerfile末尾的RUN命令,Docker会从头重build整个映像,还是能够重新使用中间相关RUN命令之前的图像?

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

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

如果更改构build参数的值,那么在该ARG行后面的所有图层都将失效。 所以我想你应该在使用ARG之前join它。

在你需要之前:

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 

在第一个例子中,caching使用了两层,第二层使用了caching中的一层(有趣的是ARG层本身)。