如何deviseDocker路由和数据库层?
我有几个Django,我想在运行CentOS的单个docker主机上托pipe。 我想要3层
- networking
- 应用
- 数据库
networking:我想在networking层有一个nginx容器,将请求路由到应用程序层的不同容器。 我玩在这个docker容器中使用1:1端口映射,将主机上的端口80暴露给容器。 Nginx会在运行在8001-8010端口的应用层使用直接请求
应用程序:我有几个容器,每个运行一个独立的Django应用程序,使用端口8001-8010上运行的Gunicorn
数据库:一个容器为每个应用程序运行MySQL并使用不同的数据库。 MYSQL容器将有一个数据卷链接到它的持久性。
我明白你可以链接容器。 但据我了解,我认为它依赖于容器的启动顺序,即:如何在不启动的情况下将nginx链接到多个容器。
所以我的问题是
-
当应用程序中容器的数量/名称总是在变化时,如何将networking层连接到应用程序层。 即:我可能会在线/离线带来一个新的applcation。 我将如何更新nginxconfiguration和寻址是什么样子?
-
如何将应用程序层连接到数据库层? 我必须使用Docker链接吗? 在我的Django应用程序代码中,我需要使用数据库的主机名来连接。 我会把我的docker集装箱的主机名放在什么位置? 它能解决吗?
-
有没有我可以利用的参考架构?
Docker不支持dynamic链接,但有一些工具可以为你做到这一点,看到这个问题 。
2.)您可以先启动数据库容器,然后将所有应用程序容器链接到数据库容器。 Docker将在启动时创build主机文件(静态地,如果您的数据库容器重新启动,并获得另一个需要dynamic链接的IP,请参阅上文)。 当你像这样链接一个容器时:
-link db:db
您可以使用主机名db访问容器。
我结束了使用这个解决scheme:
https://github.com/blalor/docker-hosts
它允许您必须通过主机名来引用同一主机上的其他容器。 它也是dynamic的,因为容器上下移动时,容器上的/ etc / host文件会dynamic更新。