用于链接Docker文件的Docker选项

用于链接Docker文件的Docker选项,docker,Docker,我很想制作可重复使用的dockerfiles。因为没有变量,也没有include选项,所以我认为无论如何都不需要这样做,对吗?有人有好的选择吗(除了动态创建/修改dockerfile和构建时间之外) 希望能够恢复生产环境dockerfiles,因为每个服务有1个(例如:1个web应用程序、1个数据库、1个缓存等),并在同一个映像上构建所有这些文件,以便我可以在1个容器中运行完整的应用程序(1个可能的用例是在单个服务器上运行多个功能分支) 是的,我知道我可以分别构建每个容器并将它们链接起来,但对于

我很想制作可重复使用的dockerfiles。因为没有变量,也没有include选项,所以我认为无论如何都不需要这样做,对吗?有人有好的选择吗(除了动态创建/修改dockerfile和构建时间之外)

希望能够恢复生产环境dockerfiles,因为每个服务有1个(例如:1个web应用程序、1个数据库、1个缓存等),并在同一个映像上构建所有这些文件,以便我可以在1个容器中运行完整的应用程序(1个可能的用例是在单个服务器上运行多个功能分支)


是的,我知道我可以分别构建每个容器并将它们链接起来,但对于设置和管理来说,这似乎是一个过度的杀戮(因为在某些情况下,单个功能分支可能需要6个或更多容器)

如果您不想创建多个图像,您可以始终创建一个怪物图像,其中安装了所有内容。在我看来,这是一种代码气味,但这是可能的。如果您永远不会在服务器之间拆分服务,这甚至可能是有效的

如果要在不同的上下文中使用相同类型的图像,可以使用环境变量来参数化行为,并且仍然使用相同的图像。例如,有一个bash脚本,该脚本需要您的_变量,并使用
-e
选项启动容器(请参阅)。例如


有这样的工具,使提出一些容器变得容易。您仍然可以单独部署单独的系统,但它们可以作为一个整体使用。

您可以使用标记来命名docker映像。这使得链接dockerfile有些容易:

假设目录
包含模块
模块1
的子目录

build_all.sh:

docker build -t "module1" module1
docker build -t "module1" module2
如果这是用于构建的序列,则在
module2/Dockerfile
中可以使用

FROM module1

不完美,因为为什么模块2需要提前了解模块1,但它是有效的。

这是一个很好的观点。1主映像,然后根据环境仅运行所需的服务。绝对不理想,但确实完成了工作。希望他们一直在谈论的INCLUDE选项能够尽早进入“1主映像,然后根据环境运行所需的服务”。这不是我的建议!如果您总是将多个服务组合在一起使用,则只能将它们组合在一个映像中。否则,制作多个图像。使用环境变量在不同上下文中使用特定服务的映像来调整该服务的行为。
FROM module1