Docker Swarm 网络
默认情况下,Docker作为一个隔离的单节点工作。所有容器仅部署在引擎上。群模式将它变成了一个多主机集群感知引擎。
初始化集群
$ docker swarm init
Swarm initialized: current node (korrjr24x2drfvlu78xi77lno) is now a manager.
To add a worker to this swarm, run the following command:
docker swarm join --token SWMTKN-1-1hriikcsgzi577cl3xcu6s0x7kk3058by92vvbtdltjsz8mp9s-3j2cuvx64eqm0tmkmwru6tn9z 172.17.0.139:2377
To add a manager to this swarm, run 'docker swarm join-token manager' and follow the instructions.
$
在第二台主机上执行下面的命令,将它作为一个worker添加到集群中。
$ token=$(ssh -o StrictHostKeyChecking=no 172.17.0.139 "docker swarm join-token -q worker") && docker swarm join 172.17.0.139:2377 --token $token
Warning: Permanently added '172.17.0.139' (ECDSA) to the list of known hosts.
This node joined a swarm as a worker.
Overlay Networks是通过Docker CLI创建的,类似于在主机之间创建桥接网络。当创建网络时,将使用一种覆盖驱动类型。当新的服务通过集群模式部署时,它们可以利用这个网络允许容器进行通信.
要创建Overlay Network
,使用CLI并定义驱动程序。网络只能通过群管理器节点创建。网络名称为app1-network
$ docker network create -d overlay app1-network
vuq3m5hi0t0jkvo1djuhpeqsp
$ docker network ls
NETWORK ID NAME DRIVER SCOPE
vuq3m5hi0t0j app1-network overlay swarm
f9000dd7435e bridge bridge local
d17623c76ebf docker_gwbridge bridge local
8b89e3388c32 host host local
kuugxuiaalh1 ingress overlay swarm
注意:你创建的overlay网络不会出现在工作节点上。manager节点处理网络创建和正在部署的服务。
$ docker network ls
NETWORK ID NAME DRIVER SCOPE
1d52a41d7ffb bridge bridge local
398c1bd88b1d docker_gwbridge bridge local
8b89e3388c32 host host local
kuugxuiaalh1 ingress overlay swarm
b3dc159371bf none null local
一旦创建了网络,就可以部署服务,并能够与网络上的其他容器通信。
下面将使用网络部署Redis服务。该服务的名称将是redis
,可用于通过DNS发现。
$ docker service create --name redis --network app1-network redis:alpine
wdz1i71gu6c1ep54jjfja1ziu
下一步将在不同的节点上部署一个web应用程序,通过网络与Redis进行交互。
$ docker service create \
> --network app1-network -p 80:3000 \
> --replicas 1 --name app1-web \
> katacoda/redis-node-docker-example
p8ktbxnju1cy9vopuaxwobe0q
对于双节点部署,每个容器将被部署到不同的主机上。
他们会利用覆盖网络和DNS发现进行通信。发送HTTP请求将在Redis中保持客户端的IP。
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
cb586ee1000f redis:alpine "docker-entrypoint.s…" 55 seconds ago Up 52 seconds 6379/tcp redis.1.ajuo5o3z4snh0shbjur9qhnsg
$ curl host01
This page was generated after talking to redis.
Application Build: 1
Total requests: 1
IP count:
::ffff:10.0.0.2: 1
$ curl host01
This page was generated after talking to redis.
Application Build: 1
Total requests: 2
IP count:
参考:
- Manage swarm service networks
- Use overlay networks
- Networking with overlay networks
- How Docker Swarm Container Networking Works – Under the Hood