如何设计Docker路由和数据库层?

时间:2014-12-04 21:33:41

标签: docker

我想在运行CentOS的单个docker主机上托管一些Django。我想要3层

  • 网络
  • 应用
  • 数据库

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

应用程序我有几个容器,每个容器运行一个单独的django应用程序,使用Gunicorn在端口8001-8010上运行

数据库:一个运行MySQL的容器,每个应用程序都有一个不同的数据库。 MYSQL容器将有一个链接到它的数据卷以实现持久性。

我知道你可以链接容器。但据我了解,我认为它依赖于容器启动的顺序,即:如何在尚未启动时将nginx链接到多个容器。

所以我的问题是

  1. 当应用程序中容器的数量/名称始终在变化时,如何将网络层连接到应用程序层。即:我可能会在线/离线带来新的应用程序。我如何更新nginx配置以及寻址会是什么样的?

  2. 如何将应用程序层连接到数据库层?我必须使用Docker Linking吗?在我的Django应用程序代码中,我需要使用数据库的主机名来连接。我将什么用于我的docker容器的主机名?它能够解决吗?

  3. 我可以利用参考架构吗?

2 个答案:

答案 0 :(得分:0)

Docker不支持动态链接,但有些工具可以为您执行此操作,请参阅此SO question

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

-link db:db

您可以使用主机名db。

访问容器

答案 1 :(得分:0)

我最终使用了这个解决方案:

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

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