堆栈由几个应用程序/微服务组成,在开发中需要连接到本地运行,每个应用程序/微服务都在自己的存储库中
例如。前端,数据库,API
如果每个应用程序都有自己的 Dockerfile,并且 docker-compose.yml 列出了运行该应用程序所需的服务,那么对于整个堆栈的开发建议采用哪些做法?
最佳答案
这正是我们在工作中所做的。
在 Apache (prod) 或节点 (dev) 上运行的前端 angular
所有bog标准请求都正常处理,所有对api容器的请求在url中都有/imanapicall,并根据url包含/imanapicall的事实代理到api容器
这是标准做法。 Fe 容器是无状态的。
我们有运行 api 的节点,它是无状态的,只是从 db 请求数据并将其发送回前端
我们有节点运行 restify 但表达更受欢迎
然后大多数人使用 mongodb 但我们使用一些奇怪的 db 东西
重要的是要暴露容器之间的端口,确保防火墙不会带来麻烦。出于开发目的,您可能还想将所有容器的端口公开给主机,以便您可以更轻松地进行调试,例如直接点击快速端点以确保它给了我想要的东西
Ps 无状态对于支持扩展很重要,因此我可以引入负载平衡器而不必担心它会命中哪个服务器。只有 db 容器保存状态
除了您的评论...
每个层(db、api 等)都有自己的 git 存储库。
每个 git repo 都有一个自动化的 Jenkins 作业,它执行构建(推送到 repo)并在成功时推送一个新的 docker 镜像。
然后我们有另一个 git repo 负责将它们整合在一起。这个 repo 基本上由一个 docker compose 文件组成,用于拉取所有相关的容器并运行它们。
任务完成。
这给出了一个简单的概述。如果您有任何更详细的问题,请随时提出。
细节...
在数据库层的开发过程中不会出现任何困难。
但是,例如在api层的开发过程中,该层依赖于db层,因此在开发api层时需要运行db层的docker容器。也可以为此使用 compose。
在开发前端层时,这依赖于 db 和 api 层。
最好在开发过程中使用通用解决方案,允许所有容器在其最新的 docker 镜像状态下站立,并忽略那些与当前目的无关的容器。
例如,
在开发前端时,从最新的镜像中调出所有 3 个容器。忽略前端容器并照常使用您的前端开发环境。将前端开发环境指向api容器。希望这是有道理的。
忽略与您正在处理的层的开发无关的容器意味着您可以在为所有层添加 docker 容器时使用通用方法,而无需为每个层提供特定的解决方案。
希望这是有道理的,而不是最容易解释的事情!
关于docker - 如何使用位于不同存储库中的 Docker 开发应用程序,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/35690187/