如何deviseDocker路由和数据库层?

我有几个Django,我想在运行CentOS的单个docker主机上托pipe。 我想要3层

  • networking
  • 应用
  • 数据库

networking:我想在networking层有一个nginx容器,将请求路由到应用程序层的不同容器。 我玩在这个docker容器中使用1:1端口映射,将主机上的端口80暴露给容器。 Nginx会在运行在8001-8010端口的应用层使用直接请求

应用程序:我有几个容器,每个运行一个独立的Django应用程序,使用端口8001-8010上运行的Gun​​icorn

数据库:一个容器为每个应用程序运行MySQL并使用不同的数据库。 MYSQL容器将有一个数据卷链接到它的持久性。

我明白你可以链接容器。 但据我了解,我认为它依赖于容器的启动顺序,即:如何在不启动的情况下将nginx链接到多个容器。

所以我的问题是

  1. 当应用程序中容器的数量/名称总是在变化时,如何将networking层连接到应用程序层。 即:我可能会在线/离线带来一个新的applcation。 我将如何更新nginxconfiguration和寻址是什么样子?

  2. 如何将应用程序层连接到数据库层? 我必须使用Docker链接吗? 在我的Django应用程序代码中,我需要使用数据库的主机名来连接。 我会把我的docker集装箱的主机名放在什么位置? 它能解决吗?

  3. 有没有我可以利用的参考架构?

Docker不支持dynamic链接,但有一些工具可以为你做到这一点,看到这个问题 。

2.)您可以先启动数据库容器,然后将所有应用程序容器链接到数据库容器。 Docker将在启动时创build主机文件(静态地,如果您的数据库容器重新启动,并获得另一个需要dynamic链接的IP,请参阅上文)。 当你像这样链接一个容器时:

-link db:db 

您可以使用主机名db访问容器。

我结束了使用这个解决scheme:

https://github.com/blalor/docker-hosts

它允许您必须通过主机名来引用同一主机上的其他容器。 它也是dynamic的,因为容器上下移动时,容器上的/ etc / host文件会dynamic更新。