我为什么要使用docker ONBUILD? 1.场景与ONBUILD 基本Dockerfile
显然,当我们在我为什么要使用docker ONBUILD? 1.场景与ONBUILD 基本Dockerfile,docker,dockerfile,docker-build,Docker,Dockerfile,Docker Build,显然,当我们在Dockerfile(testimage:latest)上面构建时,副本不会受到影响。(未复制test.py) 现在开始构建Dockerfile 现在,当我们在上面构建Dockerfile时,COPY将影响,copiestest.py 2.无ONBUILD的场景 我不需要使用ONBUILD 基本Dockerfile 上面的Dockerfile构建具有python3的docker映像(test-image2:latest) 现在,子docker图像Dockerfile 所以,我的问题
Dockerfile
(testimage:latest
)上面构建时,副本不会受到影响。(未复制test.py
)
现在开始构建Dockerfile
现在,当我们在上面构建Dockerfile
时,COPY
将影响,copiestest.py
2.无ONBUILD的场景
我不需要使用ONBUILD
基本Dockerfile
上面的Dockerfile
构建具有python3
的docker映像(test-image2:latest
)
现在,子docker图像Dockerfile
所以,我的问题是,为什么我应该使用ONBUILD
,或者什么时候应该使用?是否存在性能差异我认为答案很简单:当您的基本映像必须用于各种儿童时,您希望使用“on build”,因此您(1)避免重复,并且(2)您约束映像的用户使用“test.py”复制。一般来说,您根本不应该使用ONBUILD。让第行后面的Dockerfile做一些事情,而不是简单地合并其内容,这违反了最小意外的原则
如果您试图在构建时执行的是类似于RUN或ENV指令的操作,那么从语义上讲,无论您是在基本映像中还是在派生映像中执行,都没有区别。如果在基本映像中执行此操作(一次,而不是每次生成派生映像一次),则效率会更高
如果你想复制。。。然后,您试图在运行docker build
时将特定文件强制放在主机系统上,这对于使用者来说有点奇怪。Docker注释
在将ADD
或COPY
放入ONBUILD
时要小心。如果新构建的上下文缺少要添加的资源,“onbuild”映像将灾难性地失败。如上所述,通过允许Dockerfile
作者进行选择,添加一个单独的标记有助于缓解这种情况
正如该页面所指出的,如果您必须使用ONBUILD,那么应该在image标记中调用它,这样当您从该图像构建Dockerfile时,就可以清楚地看到,发生了一些奇怪的事情。大多数当前的Docker Hub映像根本没有-onbuild
变体,即使这样的东西通常有非常公式化的用途
FROM ubuntu:latest
RUN apt-get update && apt-get install python3
ONBUILD COPY test.py test.py
FROM test-image:latest
FROM ubuntu:latest
RUN apt-get update && apt-get install python3
FROM test-image2:latest
COPY test.py /test.py