这2个service运行在不同的机器上边,并且他们之前是可以进行通信的,可以通过servicename的方式通信。先创建mysql,wordpress查找mysql就是通过servicename这种方式。懂网络的老铁应该就知道了,这里面肯定有DNS的功劳在里面。
![58a8f98b43f0bfd62361f509274dd197.png](https://i-blog.csdnimg.cn/blog_migrate/f25beeb0428649458daed1fbfc4bda2a.jpeg)
实验的方式了解这个网络
- 必须创建overlay的network
sudo docker network create -d overlay demo
![79f62ae405732bdfe864af95d9a1a2fe.png](https://i-blog.csdnimg.cn/blog_migrate/5158704f9ce5458a15f0ef31c04f9974.jpeg)
- 创建一个service,这个service 使用whoami,这个image,这个image的作用,就是访问后,返回当前访问的主机名称
docker service create --name whoami -p 8000:8000 --network demo jwilder/whoami#查看service 里面的服务docker service ls#查看whoami的信息docker service ps whoami#因为service ps whoami 在manager上运行,直接在manager查看ps下docker ps
![501aaaeb7ccca3ee6050bfeb2dce102a.png](https://i-blog.csdnimg.cn/blog_migrate/97016dd6f6da7b0622ff713d4d6ae41b.jpeg)
![6fcbb816c950631bdc5fce3712e2c0ef.png](https://i-blog.csdnimg.cn/blog_migrate/679a52a1eb5157daa7bf719e006a7f35.jpeg)
#访问下本地manager的whoamicurl 127.0.0.1:8000
![8b95b1a390145dc5003c1bf87bd886a6.png](https://i-blog.csdnimg.cn/blog_migrate/bdc393e7ae87083f21130eb5b2522c79.jpeg)
- 创建一个service,这个service 使用busybox,之前创建过是一个比较简单的image,这个是为了当客户端service之间的访问。
docker service create --name client -d --network demo busybox sh -c "while true;do sleep 3600;done"docker service ls#运行在swam-worker1机器上docker service ps client
![f23dc4169d7095bdb622b60d7ff9ecbb.png](https://i-blog.csdnimg.cn/blog_migrate/f614bcd6b8397189231d19cf34a1b58d.jpeg)
#在swam-work1上进行运行 172.28.128.4 docker exec -it busybox的容器ID shping whoami
![f672b74776ea6f27563cc313dcd53806.png](https://i-blog.csdnimg.cn/blog_migrate/d4d58cf46180dd43e1c47f43489c65ae.jpeg)
![68ff59acaf18acbda304916df3418d6f.png](https://i-blog.csdnimg.cn/blog_migrate/8567ce322f439bf17fd4c5c4dac6bead.jpeg)
ping whoami ip地址是10.0.0.247
- 测试whoami的ip是否发生变化
在manager下进行scale 扩展为2个,查看到一个在worker2上边,并在worker2的ps上可以查看到whoami的运行,尝试继续ping whoami,结果ip不发生变化。
#manager机器上进行扩展docker service scale whoami=2#worker2 上运行 查看whoami 是否存在docker ps#worker1 上ping whoami发现ip没有发生变化10.0.0.247ping whoami
![e4b039893a1f539f296ed509548ebdaf.png](https://i-blog.csdnimg.cn/blog_migrate/ec58a8c692cf940099bd245925bf553a.jpeg)
为什么呢 ip不发生变化,其实我们ping的地址是一个虚拟的ip,docker 集群默认使用 Overlay 网络驱动,Overlay 驱动实现了跨主机集群内部虚拟网络。它的作用:将运行的多个容器(不同主机),附加(attach to)到一个网络默认情况下,服务发现为群集中的每个服务分配虚拟IP地址(VIP)和 动态 DNS,使其可以通过服务名称将其提供给同一网络上的容器。即在一个 Overlay 虚拟网络内,使用服务名称访问,将实现任务级别的负载均衡在群集中使用覆盖网络,需要在群集节点之间打开以下端口:
端口7946 TCP / UDP用于容器网络发现。
端口4789 UDP用于容器覆盖网络。
机器进行迁移的时候有一套map关系,虚拟ip 和实际的ip 有个对应的关系,
- 轮训的负载机制
wget whoami:8000more index.html#因为目前就有2个whoami,#所以可以看到第三次执行wget获取的时候发现id重复了也变成了65beb6796165
![8ce69e91948bc34f01e4460315afe200.png](https://i-blog.csdnimg.cn/blog_migrate/b450e6e4e4b161e92ec9a2fdde3efc68.jpeg)
Routing Mesh的体验
- Internal --- Container 和Container 之间的访问通过overlay网络(通过VIP虚拟IP)
- Ingress---- 如果服务有绑定接口,则此服务可以通过任意swarm节点的响应接口访问
Load Balancing
现在有3台机器1个client,2个web,他们3个连通在同一个swam下,当client访问web的时候其实,其实是访问10.0.9.4,然后通过负载的方式映射到10.0.9.5或者10.0.9.6上面。
![b2dbed05db98c1266fbbbc8b97e6dba8.png](https://i-blog.csdnimg.cn/blog_migrate/49bbdc37c1338a7db3f965bfdcce083a.jpeg)
![c28c3acc58fca73d9688fa1d3fc7cf91.png](https://i-blog.csdnimg.cn/blog_migrate/73167558cf7a39151db03d6fb27e250f.jpeg)
PS:内部负载均衡
当在docker swarm集群模式下创建一个服务时,会自动在服务所属的网络上给服务额外的分配一个虚拟IP,当解析服务名字时就会返回这个虚拟IP。对虚拟IP的请求会通过overlay网络自动的负载到这个服务所有的健康任务上。这个方式也避免了客户端的负载均衡,因为只有单独的一个虚拟IP会返回到客户端,docker会处理虚拟IP到具体任务的路由,并把请求平均的分配给所有的健康任务。
play with docker的使用
1.浏览器打开 https://labs.play-with-docker.com/
![306a31e2b8a730af412058493e524cde.png](https://i-blog.csdnimg.cn/blog_migrate/df59fe4aab7963099ca8ba89638a891d.jpeg)
2.点击登录
![94b5aaf2affb6f68769257c46a0c94f0.png](https://i-blog.csdnimg.cn/blog_migrate/57fec749a9725899b8710e2348f6bc19.jpeg)
3.登录后的界面
![b661ccd153ee8d793266f9c6ab533092.png](https://i-blog.csdnimg.cn/blog_migrate/9f409a9b1dc9bbfcab7944f6344bbe37.jpeg)
4.跟真实的网络环境是一样的,唯一的是有时间限制只能用4个小时 哈哈
![564dd8a899b1bfdd3fac1df185412848.png](https://i-blog.csdnimg.cn/blog_migrate/532133c4ccc0c09c0e0964b06e5e7c6d.jpeg)
5.支持文件上传
Marcos 和 Jonathan 还带来了另一个炫酷的功能就是可以在 PWD 实例中通过拖放文件的方式将 Dockerfile 直接上传到 PWD 窗口。
![72e33d48359bdacdfa11803475c3b25f.gif](https://i-blog.csdnimg.cn/blog_migrate/d2529b74e75a2ee108dbe122c250e2d2.gif)
6.模板会话
除了文件上传之外,PWD 还有一个功能,可以使用预定义的模板在几秒钟内启动 5 个节点的群集。
![412eaf2c216c32b584b7fc60c240b70d.gif](https://i-blog.csdnimg.cn/blog_migrate/e16273defb468d65789cebd719aa5d75.gif)
Play with Docker
一键使用 Docker 展示你的应用程序
PWD 附带的另一个很酷的功能是它的内嵌按钮,你可以在你的站点中使用它来设置 PWD 环境,并快速部署一个构建好的堆栈,另外还有一个 chrome 扩展 ,可以将 “Try in PWD” 按钮添加 DockerHub 最流行的镜像中。 以下是扩展程序的一个简短演示:
![cb0e6f13c10a57b7d5c98f9cb70b1230.gif](https://i-blog.csdnimg.cn/blog_migrate/8a9da2ccbe1b39a4ef80be020f56ea38.gif)
PS:快速实验学习,这个方法应该是最好的。因为docker的所有环境都给你创建完成了,绕过很多环境的坑。