我们正在移动我们的一些内部服务以依赖 Docker,而不是直接安装在主机操作系统上(好东西,对 :)。
我们将docker stack
命令与 compose 文件一起使用(我们觉得这是现代方法)。但是我们不确定如何正确地使我们的堆栈模块化,同时允许组合:
假设我们有两个堆栈:stackA
和stackB
. 这两个可以完美地单独使用,所以目前我们决定将它们托管在两个单独的存储库中,每个存储库都包含docker-compose.yml
相应堆栈的。
然而,还有一种模式stackB
可以与之通信stackA
以提供附加功能。在某些节点上,我们可能希望同时部署两者,并让它们进行通信。
默认情况下,当我们在同一个节点上启动两个堆栈时:
docker stack deploy -c stackA/ A-stack
docker stack deploy -c stackB/ B-stack
两者最终都位于不同的覆盖网络上,并且无法轻松通信。
看来我们面临着一个选择,目前我们只能找到 3 个选项:
- 我们已经看到了
stackB
在其 compose 文件中添加外部网络的方法,但这意味着现在stackB
只能在stackA
已经运行的情况下部署(因为它想加入外部网络) - 我们可以定义另一个 compose 文件,手动合并两者。但这导致我们维护另一个 repo,并重复更改。
- 我们可以让堆栈通过暴露的端口通过主机网络进行通信,但这可能感觉有点奇怪。
是否有最佳/推荐的方法来保持不同的堆栈模块化,同时允许轻松组合它们?
或者是一个隐含的假设,即一旦两个容器应该进行通信,它们就必须从同一个 compose 文件中部署?