我有一个存储库,需要在其中创建多个Dockerfile,但是每个文件都应具有不同的上下文。
我喜欢发布在here上的解决方案,但这并不完全适合我的用例。
否,这不是重复项。这是一个不同的使用案例。请保持阅读。
我知道最好从 context 不必要的文件夹中排除,尤其是当它们很大时。好吧,我的项目由几个文件夹组成,其中有些确实很大。
为简单起见,假设这是我项目的文件树:
hugeFolder1/
hugeFolder2/
littleFolder1/
littleFolder2/
并假设我需要创建两个Dockerfile(在solution that I previously mentioned之后):
docker/A/Dockerfile
<-我们将此Dockerfile称为“ A ” docker/B/Dockerfile
<-我们将此Dockerfile称为“ B ” docker-compose.yml
现在的重点是:
hugeFolder1
和两个小文件夹。hugeFolder2
和两个小文件夹。所以我想分别排除不需要的大文件夹。
实现此目标的最佳方法是什么?
答案 0 :(得分:1)
编辑:先前的答案是将图像添加到构建上下文外部的文件夹中,这将不起作用。另外,OP澄清了内容以及注释中将如何使用图像,从而显示了多阶段构建的很好用例。
根据提供的信息,我将对其进行刺杀。
首先,您不能从给定的Docker上下文中排除文件夹。如果使用docker build -t bluescores/myimage /some/path
,则上下文为/some/path/**/*
。没有排除大文件夹,小文件夹或其中的任何东西。
第二,为了使用ADD
或COPY
将文件带入docker镜像,它们必须存在于构建上下文中。
也就是说,听起来您最终将使用大小文件夹的各种组合。我认为您最好坚持概述的现有策略,并进行一些优化-即使用多阶段构建。
docker-compose
您引用的解决方案here并不是真正旨在解决紧密控制上下文的问题。这是一个与您要问的完全不同的问题的好答案。您只是在尝试立即构建图像,尽管docker-compose
可以处理这些图像,但它并没有为您带来docker build
所没有的任何东西。当您需要整理要构建的这些容器时,docker-compose
将会令人难以置信。
如果不确定您是否需要docker-compose
,请尝试在没有它的情况下进行。您以后总是可以将其重新组合。
查看multi-stage builds是否可以使用。
从本质上讲,这将使您从COPY
大文件夹的图像中挑选构建输出,并将该输出放入一个新的,较小的,更清晰的图像中。