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