项目中具有不同上下文的多个Dockerfile

时间:2019-01-07 18:16:49

标签: docker docker-compose dockerfile

我有一个存储库,需要在其中创建多个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

现在的重点是:

  • A仅需要hugeFolder1和两个小文件夹。
  • B仅需要hugeFolder2和两个小文件夹。

所以我想分别排除不需要的大文件夹。

实现此目标的最佳方法是什么?

1 个答案:

答案 0 :(得分:1)

编辑:先前的答案是将图像添加到构建上下文外部的文件夹中,这将不起作用。另外,OP澄清了内容以及注释中将如何使用图像,从而显示了多阶段构建的很好用例。

根据提供的信息,我将对其进行刺杀。

首先,您不能从给定的Docker上下文中排除文件夹。如果使用docker build -t bluescores/myimage /some/path,则上下文为/some/path/**/*。没有排除大文件夹,小文件夹或其中的任何东西。

第二,为了使用ADDCOPY将文件带入docker镜像,它们必须存在于构建上下文中。

也就是说,听起来您最终将使用大小文件夹的各种组合。我认为您最好坚持概述的现有策略,并进行一些优化-即使用多阶段构建。

暂时跳过docker-compose

您引用的解决方案here并不是真正旨在解决紧密控制上下文的问题。这是一个与您要问的完全不同的问题的好答案。您只是在尝试立即构建图像,尽管docker-compose可以处理这些图像,但它并没有为您带来docker build所没有的任何东西。当您需要整理要构建的这些容器时,docker-compose将会令人难以置信。

如果不确定您是否需要docker-compose,请尝试在没有它的情况下进行。您以后总是可以将其重新组合。

现在我的图片很大

查看multi-stage builds是否可以使用。

从本质上讲,这将使您从COPY大文件夹的图像中挑选构建输出,并将该输出放入一个新的,较小的,更清晰的图像中。