本文共 7236 字,大约阅读时间需要 24 分钟。
1. 实现功能
在同一个overlay网络network下,在swarm集群上面启动docker service服务,docker引擎会自动创建一个DNS服务。使每一个服务对应一个虚拟IP,此时通过docker服务名即可以访问该服务。无论该服务今后如何拓展,虚拟网络ip是不会变化的。2.发现服务框架
1.创建demo的overlay网络
docker network create -d overlay demo
2.创建whoami服务
[vagrant@swarm-manager ~]$ docker service create --name whoami -p 8000:8000 -d --network demo jwilder/whoamiknns4nhln5ten8cvnxmwcg868
3.查看whoami服务启动状态
(1)查看启动服务[vagrant@swarm-manager ~]$ docker service lsID NAME MODE REPLICAS IMAGE PORTSqwr4cuyrr86a client replicated 1/1 busybox:latestknns4nhln5te whoami replicated 1/1 jwilder/whoami:latest *:8000->8000/tcp
(2)查看运行地点
[vagrant@swarm-manager ~]$ docker service ps whoamiID NAME IMAGE NODE DESIRED STATE CURRENT STATE ERROR PORTSdamei4u1ihx7 whoami.1 jwilder/whoami:latest swarm-worker2 Running Running 45 seconds ago
(3)查看whoami服务运行的worker2节点,服务运行状态
[vagrant@swarm-worker2 ~]$ docker psCONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES31b30e072daa jwilder/whoami:latest "/app/http" 2 minutes ago Up 2 minutes 8000/tcp whoami.1.damei4u1ihx7hgrg7rufievaf[vagrant@swarm-worker2 ~]$ curl 127.0.0.1:8000I'm 31b30e072daa
4.创建busy box客户端service服务
vagrant@swarm-manager ~]$ docker service create --name client -d --network demo busybox sh -c "while true; do sleep 3600; done"qwr4cuyrr86avmgq6q8xp18ig
5.查看busybox服务service信息
(1)查看整体状态[vagrant@swarm-manager ~]$ docker service lsID NAME MODE REPLICAS IMAGE PORTSqwr4cuyrr86a client replicated 1/1 busybox:latestknns4nhln5te whoami replicated 1/1 jwilder/whoami:latest *:8000->8000/tcp[vagrant@swarm-[vagrant@swarm-manager ~]$ docker service ps clientID NAME IMAGE NODE DESIRED STATE CURRENT STATE ERROR PORTSywnrazvemzij client.1 busybox:latest swarm-worker1 Running Running 7 minutes ago
(2)进入worker1查看运行进程
[vagrant@swarm-worker1 ~]$ docker psCONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES5e41a868d69d busybox:latest "sh -c 'while true; …" 9 minutes ago Up 9 minutes client.1.ywnrazvemzijjch7ust01tf34
(3)进入busybox,运行shell
[vagrant@swarm-worker1 ~]$ docker exec -it 5e41a sh/ #
(4)ping whoami
[vagrant@swarm-worker1 ~]$ docker exec -it 5e41a sh/ # ping whoamiPING whoami (10.0.0.11): 56 data bytes64 bytes from 10.0.0.11: seq=0 ttl=64 time=0.237 ms64 bytes from 10.0.0.11: seq=1 ttl=64 time=0.096 ms64 bytes from 10.0.0.11: seq=2 ttl=64 time=0.074 ms64 bytes from 10.0.0.11: seq=3 ttl=64 time=0.071 ms^C--- whoami ping statistics ---4 packets transmitted, 4 packets received, 0% packet lossround-trip min/avg/max = 0.071/0.119/0.237 ms/ #
(5)但是这个10.0.0.11地址不是whoami所在容器的真实地址!
1.扩展whoami为两个服务
[vagrant@swarm-manager ~]$ docker service scale whoami=2whoami scaled to 2overall progress: 2 out of 2 tasks1/2: running2/2: runningverify: Service converged
2.查看whoami服务
(1)总体详细状态[vagrant@swarm-manager ~]$ docker service ps whoamiID NAME IMAGE NODE DESIRED STATE CURRENT STATE ERROR PORTSdamei4u1ihx7 whoami.1 jwilder/whoami:latest swarm-worker2 Running Running 10 minutes agovus1yw9b4i51 whoami.2 jwilder/whoami:latest swarm-manager Running Running 52 seconds ago
(2)进入manager查看进程
[vagrant@swarm-manager ~]$ docker psCONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMESd780c8fa2031 jwilder/whoami:latest "/app/http" About a minute ago Up About a minute 8000/tcp whoami.2.vus1yw9b4i519crs3h1zi48ln
(3)回到busybox的内容部接着ping whoami,whoami地址不变
[vagrant@swarm-worker1 ~]$ docker exec -it 5e41a sh/ # ping whoamiPING whoami (10.0.0.11): 56 data bytes64 bytes from 10.0.0.11: seq=0 ttl=64 time=0.237 ms64 bytes from 10.0.0.11: seq=1 ttl=64 time=0.096 ms64 bytes from 10.0.0.11: seq=2 ttl=64 time=0.074 ms64 bytes from 10.0.0.11: seq=3 ttl=64 time=0.071 ms^C--- whoami ping statistics ---4 packets transmitted, 4 packets received, 0% packet lossround-trip min/avg/max = 0.071/0.119/0.237 ms/ # ping whoamiPING whoami (10.0.0.11): 56 data bytes64 bytes from 10.0.0.11: seq=0 ttl=64 time=0.056 ms64 bytes from 10.0.0.11: seq=1 ttl=64 time=0.091 ms64 bytes from 10.0.0.11: seq=2 ttl=64 time=0.109 ms^C
3.解释:这个ip是个vip,即虚拟ip,并非是真实ip。
查看dns的域名映射,在busybox容器中
(1)进入worker1的busybox中运行shell
[vagrant@swarm-worker1 ~]$ docker exec -it 5e41a sh/ #
(2)查询whoami的真实ip
/ # nslookup whoami或者/ # nslookup tasks.whoami
(3)在whoami服务上运行ip a查看网址,是没有10.0.0.11的虚拟网络的
[vagrant@swarm-manager ~]$ docker psCONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMESd780c8fa2031 jwilder/whoami:latest "/app/http" About a minute ago Up About a minute 8000/tcp whoami.2.vus1yw9b4i519crs3h1zi48ln[vagrant@swarm-manager ~]$ docker exec d780 ip a1: lo:mtu 65536 qdisc noqueue state UNKNOWN qlen 1000 link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 inet 127.0.0.1/8 scope host lo valid_lft forever preferred_lft forever28: eth1@if29: mtu 1450 qdisc noqueue state UP link/ether 02:42:0a:ff:00:09 brd ff:ff:ff:ff:ff:ff inet 10.255.0.9/16 brd 10.255.255.255 scope global eth1 valid_lft forever preferred_lft forever30: eth2@if31: mtu 1500 qdisc noqueue state UP link/ether 02:42:ac:12:00:03 brd ff:ff:ff:ff:ff:ff inet 172.18.0.3/16 brd 172.18.255.255 scope global eth2 valid_lft forever preferred_lft forever32: eth0@if33: mtu 1450 qdisc noqueue state UP link/ether 02:42:0a:00:00:0e brd ff:ff:ff:ff:ff:ff inet 10.0.0.14/24 brd 10.0.0.255 scope global eth0 valid_lft forever preferred_lft forever
4.检查访问虚拟网络
(1)进入busybox client容器
/etc # wget whoami:8000Connecting to whoami:8000 (10.0.0.11:8000)saving to 'index.html'index.html 100% |*********************************************| 17 0:00:00 ETA'index.html' saved查看/etc # more index.htmlI'm a0aeae5814f5
(2)第二次访问,hostname变了
删除之前index.html/etc # mv index.html index.html.1/etc # wget whoami:8000Connecting to whoami:8000 (10.0.0.11:8000)saving to 'index.html'index.html 100% |*********************************************| 17 0:00:00 ETA'index.html' saved/etc # more index.htmlI'm d780c8fa2031【备注:d780c8fa2031是manager上docker whoami容器的hostname!上面的同理。】
(3)因为每次访问10.0.0.11(whoami),返回是每个不同的地址对应的主机名。做负载均衡。
转载地址:http://vwfgi.baihongyu.com/