如何使用Docker开发应用程序,这些应用程序位于不同的存储库中

时间:2016-02-29 00:37:49

标签: docker docker-compose

堆栈包含一些应用程序/微服务需要连接才能在开发中本地运行,并且每个应用程序/微服务都在自己的存储库中

E.g。前端,db,api

如果每个应用程序都有自己的Dockerfile,而docker-compose.yml列出了运行该应用程序所需的服务,那么建议开发整个堆栈的做法是什么?

1 个答案:

答案 0 :(得分:3)

这正是我们在工作中所做的。

在Apache(prod)或节点(dev)上运行前端角度 所有bog标准请求都正常处理,对api容器的所有请求都在url中有/ imanapicall,并根据url包含/ imanapicall的事实代理到api容器 这是标准做法。 Fe容器是无国籍的。

我们有运行api的节点,它是无状态的,只是从db请求数据并将其发送回前端

我们有节点运行restify但表达更流行

然后大多数人使用mongodb,但我们使用一些奇怪的数据库内容

重要的是在容器之间暴露端口,确保防火墙不是一件痛苦的事。出于开发目的,您可能想要将所有容器的端口暴露给主机,因此您可以更轻松地调试,例如直接点击快速端点以确保它给我我想要的

Ps无状态对于支持扩展非常重要,因此我可以引入一个负载均衡器,而不用担心它会遇到哪个服务器。只有db容器保存状态

进一步评论......

每个层(db,api等)都有自己的git repo。 每个git repo都有一个自动化的Jenkins作业,可以进行构建(推送到repo),并且成功推送一个新的docker镜像。

然后我们有另一个git repo负责将它们全部拉到一起。这个repo基本上由一个docker compose文件组成,用于拉出所有相关容器并运行它们。 完成工作。

这给出了一个简单的概述。如果您有任何更详细的问题,请随时提出。

精细细节...

在db层开发期间,不会出现任何困难。

但是,在开发api层时,例如,此层依赖于db层,因此在开发api层时需要运行db层的docker容器。也可以用于此。

在开发前端层时,这依赖于db和api tiers。 最好在开发期间使用通用解决方案,允许所有容器在最新的docker镜像状态中站起来,并忽略那些与当前目的无关的容器。

例如,

在开发前端时,从最新图像中调出所有3个容器。忽略前端容器并像往常一样使用前端开发环境。将前端开发环境指向api容器。希望这是有道理的。

忽略与您正在开发的层的开发无关的容器意味着您可以在为所有层创建docker容器时使用通用方法,而无需为每个层提供特定的解决方案。

希望这是有道理的,而不是最简单的解释!