docker - 项目中具有不同上下文的多个 Dockerfile
问题描述
我有一个存储库,我需要在其中创建多个 Dockerfile,但它们每个都应该有不同的上下文。
我喜欢这里发布的解决方案,但它并不完全适合我的用例。
不,这不是重复的。这是一个不同的用例。请继续阅读。
我知道最好从上下文中排除不必要的文件夹,尤其是当它们很大的时候。好吧,我的项目由几个文件夹组成,其中一些真的很大。
为简单起见,假设这是我项目的文件树:
hugeFolder1/
hugeFolder2/
littleFolder1/
littleFolder2/
并假设我需要创建两个 Dockerfile(按照我之前提到的解决方案):
docker/A/Dockerfile
<- 我们称这个 Dockerfile 为“ A ”docker/B/Dockerfile
<- 让我们将此 Dockerfile 称为“ B ”docker-compose.yml
现在的重点是:
- 一个只需要
hugeFolder1
和两个小文件夹。 - B只需要
hugeFolder2
和两个小文件夹。
所以我想分别排除不需要的大文件夹。
实现这一目标的最佳方法是什么?
解决方案
编辑:以前的答案是将文件夹添加到构建上下文之外的图像中,这不起作用。此外,OP 澄清了内容以及如何在评论中使用图像,展示了一个非常好的多阶段构建用例。
根据提供的信息,我会尝试一下。
首先,您不能从给定的 docker 上下文中排除文件夹。如果您使用docker build -t bluescores/myimage /some/path
,您的上下文是/some/path/**/*
. 不排除大文件夹、小文件夹或其中的任何内容。
其次,为了使用ADD
或COPY
将文件带入您的 docker 映像,它们必须存在于构建上下文中。
也就是说,听起来您最终会使用大文件夹和小文件夹的各种组合。我认为你最好坚持你已经概述的现有策略,并进行一些优化 - 即使用多阶段构建。
docker-compose
暂时跳过
您在这里引用的解决方案并不是真正旨在解决密切控制上下文的问题。这是一个与您所问的完全不同的问题的好答案。您现在只是尝试构建图像,虽然docker-compose
可以处理它,但它不会带来任何您没有的表docker build
。当您需要编排您正在构建的这些容器时,这docker-compose
将是不可思议的。
如果您不确定是否需要docker-compose
,请尝试在没有它的情况下执行此操作。您以后可以随时将其重新混音。
现在我的形象是巨大的
看看你是否可以使用多阶段构建。
这基本上可以让您从巨大文件夹中的映像中挑选构建输出COPY
,并将该输出放入一个新的、更小、更清晰的映像中。
推荐阅读
- websocket - 调用 post_to_connection 时 Lambda 超时
- json - 如何在 Flutter 中解码 JSON?
- javascript - 如何将 javascript 变量值从一个 html 页面传递到另一个 html 页面?
- python - 我正在尝试修复此 pylint 警告消息
- python - 如何使用谷歌产品搜索 API?
- excel - VLOOKUP 公式未正确检测
- docker - 如何为在 AWS 批处理中创建的作业定义设置 logConfiguration
- anylogic - AnyLogic - 无法解决或不是现场问题
- r - 通过多个重叠会话量化观看(或未观看)的时间
- python - 当我用 tf.keras 替换 keras 时,模型坏了