Creamos una subred swarm por ejemplo # docker network create --subnet=172.19.0.0/16 swarm b61fd20f8ea5d6c53e70f938b4e1ce44333ba0fd993a333c5fb9fefc6cd2d1f3 # docker network ls NETWORK ID NAME DRIVER SCOPE ef49af878942 bridge bridge local 3016c3471d38 host host local e72a3fcddff2 none null local b61fd20f8ea5 swarm bridge local 15c7084e1eea weblogicnet bridge local Miramos el detalle de la red: # docker inspect swarm [ { "Name": "swarm", "Id": "b61fd20f8ea5d6c53e70f938b4e1ce44333ba0fd993a333c5fb9fefc6cd2d1f3", "Created": "2017-02-13T18:10:44.25361846+01:00", "Scope": "local", "Driver": "bridge", "EnableIPv6": false, "IPAM": { "Driver": "default", "Options": {}, "Config": [ { "Subnet": "172.19.0.0/16" } ] }, "Internal": false, "Attachable": false, "Containers": {}, "Options": {}, "Labels": {} } ] Ahora ejecutamos cada máquina con una ip: # docker run --name swarm-nodo1 --privileged --net swarm --ip 172.19.0.101 --hostname swarm1 --add-host=swarm1:172.19.0.101 --add-host=swarm2:172.19.0.102 --add-host=swarm3:172.19.0.103 -ti swarm # docker run --name swarm-nodo2 --privileged --net swarm --ip 172.19.0.102 --hostname swarm2 --add-host=swarm1:172.19.0.101 --add-host=swarm2:172.19.0.102 --add-host=swarm3:172.19.0.103 -ti swarm # docker run --name swarm-nodo3 --privileged --net swarm --ip 172.19.0.103 --hostname swarm3 --add-host=swarm1:172.19.0.101 --add-host=swarm2:172.19.0.102 --add-host=swarm3:172.19.0.103 -ti swarm Creamos swarm en el primer nodo # docker swarm init --advertise-addr 172.19.0.101 Swarm initialized: current node (obtavwk9ypnpq20ubd54gt7me) is now a manager. To add a worker to this swarm, run the following command: docker swarm join \ --token SWMTKN-1-5wvvfc5qpmk4avbqzv0iw1st0qxtwb15ut0phwyjgmv2iw65t7-akxww3rmtsimaihqokcgmwu7a \ 172.19.0.101:2377 To add a manager to this swarm, run 'docker swarm join-token manager' and follow the instructions. Si hacemos docker info, vemos swarm: # docker info ......... Swarm: active NodeID: obtavwk9ypnpq20ubd54gt7me Is Manager: true ClusterID: tbzs05pa17b5vkseyzzmc2sew Managers: 1 Nodes: 1 ......... Podemos ver los nodos activos: # docker node ls ID HOSTNAME STATUS AVAILABILITY MANAGER STATUS obtavwk9ypnpq20ubd54gt7me * swarm1 Ready Active Leader El * indica que actualmente estamos conectados a ese nodo Desde el manager, sacamos el token para unir a los otros: # docker swarm join-token worker To add a worker to this swarm, run the following command: docker swarm join \ --token SWMTKN-1-5wvvfc5qpmk4avbqzv0iw1st0qxtwb15ut0phwyjgmv2iw65t7-akxww3rmtsimaihqokcgmwu7a \ 172.19.0.101:2377 Lanzamos ese comando en los otros dos nodos y vemos que se han unido: # docker node ls ID HOSTNAME STATUS AVAILABILITY MANAGER STATUS bz11p92f0ietyc2rvv8zs63dt swarm3 Ready Active mzjrvtr4519idowp10y1lowfy swarm2 Ready Active obtavwk9ypnpq20ubd54gt7me * swarm1 Ready Active Leader ====== Crear un servicio ====== https://docs.docker.com/engine/swarm/swarm-tutorial/deploy-service/ # docker service create --replicas 1 --name helloworld alpine ping docker.com ny109vvho4z1f63lo9f2bbsb4 # docker service ls ID NAME MODE REPLICAS IMAGE ny109vvho4z1 helloworld replicated 1/1 alpine:latest Ahora miramos el servicio https://docs.docker.com/engine/swarm/swarm-tutorial/inspect-service/ docker service inspect --pretty helloworld ID: ny109vvho4z1f63lo9f2bbsb4 Name: helloworld Service Mode: Replicated Replicas: 1 Placement: UpdateConfig: Parallelism: 1 On failure: pause Max failure ratio: 0 ContainerSpec: Image: alpine:latest@sha256:dfbd4a3a8ebca874ebd2474f044a0b33600d4523d03b0df76e5c5986cb02d7e8 Args: ping docker.com Resources: Endpoint Mode: vip Vemos donde corre: # docker service ps helloworld ID NAME IMAGE NODE DESIRED STATE CURRENT STATE ERROR PORTS l4edt3bnis27 helloworld.1 alpine:latest swarm3 Running Running 3 minutes ago