如何模仿“a”;反向代理或负载平衡器设置后面的Docker容器”;开发期间

如何模仿“a”;反向代理或负载平衡器设置后面的Docker容器”;开发期间,docker,reverse-proxy,development-environment,12factor,Docker,Reverse Proxy,Development Environment,12factor,在Docker容器内开发和测试应用程序,并最终在生产中以相同的方式运行它们,这是一个很好的方法,可以减少在我的机器上使用的,但在生产中却神奇地失败了 这也反映在我尝试遵循的众所周知的第10个因素中,只要它对给定用例有意义:保持开发、分段和生产尽可能相似。 在我们的生产服务器上,我们有一个反向代理,它接收端口80上的传入请求,并根据通过虚拟域访问主机时使用的主机头将它们转发到正确的容器,例如,对app1.domain.name的请求转到app1容器,而对app2.domain.name的请求转到a

在Docker容器内开发和测试应用程序,并最终在生产中以相同的方式运行它们,这是一个很好的方法,可以减少在我的机器上使用的
,但在生产中却神奇地失败了

这也反映在我尝试遵循的众所周知的第10个因素中,只要它对给定用例有意义:
保持开发、分段和生产尽可能相似。

在我们的生产服务器上,我们有一个反向代理,它接收端口80上的传入请求,并根据通过虚拟域访问主机时使用的
主机
头将它们转发到正确的容器,例如,对
app1.domain.name的请求
转到
app1
容器,而对
app2.domain.name的请求
转到
app2
容器等。我们使用它,但它也可以是或任何其他反向代理或负载平衡器。没有为应用程序容器公开其他容器端口

我现在的问题是,在开发过程中模拟这种设置最有效的方法是什么?我可以想到以下几点:

  • 在开发过程中忽略反向代理,并为每个服务公开一个公共端口,在开发过程中可以使用它。但是,在生产中,不要公开任何端口。虽然这很容易做到,但它并没有给出开发和生产设置之间的精确对等
  • 在开发期间在本地运行类似的反向代理。虽然这在开发和生产环境之间提供了更好的对等性,但这一需求需要在某个地方记录下来,并给新开发人员带来了一些负担,使他们在实际深入应用程序本身之前能够正确地获得先决条件——Docker方法实际上试图避免这一点
  • 通过将所有内容放入虚拟机(例如,使用)来自动设置模拟生产环境(包括反向代理)的开发环境。虽然从开发人员的角度来看这会很方便,但初始设置需要更多的时间,并且会消耗更多的资源

  • 我是否错过了一些优于上述方法的其他方法?

    #3应该只需要为您的服务定义一个容器服务定义(docker compose或等效方法),其中包括。如果您已经为生产定义了它,那么这应该不需要流浪,甚至不需要很多开销?这是事实,可能是最简单的方法。如果您想在开发机器上同时运行多个服务,而每个服务都会启动自己的
    traefik
    容器,那么这可能会妨碍您,但肯定有办法防止这种情况发生。#3应该只需要为您的服务定义一个容器服务定义(docker compose或等效定义),其中包括。如果您已经为生产定义了它,那么这应该不需要流浪,甚至不需要很多开销?这是事实,可能是最简单的方法。如果您想在dev机器上同时运行多个服务,而每个服务都会启动自己的
    traefik
    容器,那么这可能会妨碍您的工作,但肯定有办法防止这种情况发生。