我开始使用Docker进行基于容器的架构,我怀疑这可能是一个废话。
链接在不同主机上运行的Docker容器是否有意义?
假设我们有两个容器:
barDatabase
fooService
如果两者都在同一主机中,我们会将barDatabase
链接到fooService
,这样就可以在主机名之间进行通信。
但如果他们在不同的机器上运行:
barDatabase
- > machine1.company.local
fooService
- > machine2.company.local
还有必要将它们联系起来吗?我们不能使用原始主机名而不链接它们吗?
感谢。
答案 0 :(得分:1)
在这种情况下,您必须从machine1中的数据库容器中公开要访问的端口,然后在machine2中,您只需指向暴露端口上的machine1,如您所料。没有必要(和AFAIK没办法)直接链接来自不同机器的容器。
答案 1 :(得分:1)
是和否。较新版本的Docker具有docker网络 - 这需要一些额外的配置,例如 - etcd
来管理配置。
这样做,您可以:
docker network create sometnetname
docker run -d --net somenetname --name barDatabase yourimage
在你的另一位主持人身上:
docker run -d -p 8080:8080 --net somenetname --name fooService service_image
然后,您就可以从fooService“ping”barDatabase,就像它是主机名一样。并且fooService将附加到外部网络,并充当网关。
这适用于我的1.9.1
码头工具,而不是我的1.8.2
- 在centos上。 (所以我认为这是一个1.9+的功能,但我找不到直接来源)。
更多细节: https://docs.docker.com/engine/userguide/networking/get-started-overlay/
需要设置更多的faff,因为你必须配置etcd(或其他键值存储)
我一直在使用它来在专用网络上放置一个多节点的elasticsearch实例,我认为这类似于你的用例。 (3个主机上的3个节点,其中有logstash,而kibana充当网关,以及执行某些安全/重写的nginx管理代理)