未能看到大使模式如何增强Docker中的模块化/简单容器架构
我没有看到如何实施大使模式将帮助我们简化/模块化我们的集装箱架构的devise。
比方说,我在主机A上有一个数据库容器db
,并由位于主机B上的程序db-client
使用,它们通过networking通过大使容器db-ambassador
和db-foreign-ambassador
连接:
[host A (db) --> (db-ambassador)] <- ... -> [host B (db-forgn-ambsdr) --> (db-client)]
在同一台机器上的容器之间的连接,例如db
到db-ambassador
和db-foreign-ambassador
到db-client
都是通过Docker的--link
参数完成的,而db-ambassador
和db-foreign-ambassador
在networking上进行通讯。
但是,– --link
只是将IP地址,端口和其他信息从一个容器插入另一个容器的奇特方式。 当一个容器发生故障时,与其链接的另一个容器不会得到通知,也不会在重新启动时知道崩溃容器的新IP地址。 总而言之,如果一个连接到另一个的容器死了,链接也就死了。
考虑我的例子,让我们说, db
崩溃并重新启动,从而得到分配到不同的IP。 db-ambassador
也将不得不重新启动,以更新他们之间的联系…除非你不应该。 如果db-ambassador
重新启动,IP也会改变,而foreign-db-ambassador
将不知道在新的IP地址到达哪里。
在Docker关于大使模式的文档中引用一篇文章 ,
当您需要重新连线您的客户与另一个Redis服务器交谈时,您可以重新启动客户所连接的redis-ambassador容器。
此模式还允许您将Redis服务器透明地从消费者移动到不同的Docker主机。
看来这正是它正在试图解决的问题。 据我的理解,这完全没有。 不,如果你考虑 – --link
只是有用的,只要链接的容器不会崩溃。 如果支持 ,在其以前的IP上启动崩溃节点的选项将是一个很好的解决方法,至less对于中小型体系结构来说。
我错过了什么明显的?
杰罗姆有一些很好的幻灯片(11-33),讲述了大使们在“将应用程序投放到生产中”的幻灯片中比其他服务发现方式(如DNS,键值存储,绑定configuration文件等) 容器与docker“ 。 他对于如何解决我认为你提到的问题也有一些build议,特别是docker大使看起来很有希望。
- Docker和包pipe理器在生产中
- 如何使用Docker容器作为Apache服务器?
- 无法从github下载Docker机器
- docker运行<image>:/ usr / bin / env:ruby.exe:没有这样的文件或目录
- 为桌面环境分配Docker容器应用程序
- 调用从quickstart.cloudera / 172.17.0.2到quickstart.cloudera:8020连接exception失败:java.net.ConnectException:连接被拒绝
- 我如何启用gocd-server的docker日志?
- 在容器中设置ENVvariables不工作,是否在容器运行时执行“/ usr / local / bin”下的每一个?
- 如何摆脱docker0正在使用的HWaddr?