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:

参考:

Copyright © ghostwritten 浙ICP备2020032454号 2022 all right reserved,powered by Gitbook该文件修订时间: 2022-12-23 16:26:47

results matching ""

    No results matching ""