介绍一种生产环境Docker overlay network的配置方案。
先讲一下生产环境中的问题:
docker service create
/docker stack deploy
创建的。docker run
/docker compose up
创建的。tasks.<service-name>
DNS name 连接到无状态应用(见Container discovery)<container-name>
DNS name 连接到有状态应用解决办法:
到manager节点上创建attachable的overlay network,名字叫做prod-overlay:
在manager节点上查看这个网络是否创建成功:
在worker节点上查看这个网络,这时你看不到这个网络,不过不要担心,当后面在worker节点上创建工作负载后就能看到了:
在manager上创建容器c1
,挂到prod-overlay
network上:
在worker上创建容器c2
,挂到prod-overlay
network上:
在manager上创建service c
,挂到prod-overlay
network上:
之前在worker节点上没有看到prod-overlay
network,现在你应该可以看见了:
到manager节点上,让c1
ping c2
到manager节点上,让c1
ping tasks.c
,tasks.c
是之前创建的service c
的DNS name:
到manager节点上,让c1
查询 tasks.c
的DNS name,可以看到tasks.c
有两条记录:
到manager节点上,查看service c
的task,看到有c.1
、c.2
两个task,分别部署在两个节点上:
到c.1
task所在的节点上,查看task c.1
的容器名:
然后在c1
里ping task c.1
的容器名:
你同样可以:
c2
里:
c1
tasks.c
c.1
、c.2
的容器c.1
、c.2
的容器里:
c1
、c2
;tasks.c
c.1
、c.2
的容器通过docker run
/ docker compose up
创建的容器的名字,要保证在整个集群里是唯一的。docker 不会帮你检查名称冲突的情况,如果名称冲突了那么会得到错误的DNS结果。