Swarm Mode: Create a Docker Swarm Cluster

Docker swarm mode requires docker engine 1.12 or higher. This lab will need two docker engine host created by docker machine.

Prepare Environment

Create two docker host machines.

➜  ~ docker-machine ls
NAME            ACTIVE   DRIVER       STATE     URL                         SWARM   DOCKER    ERRORS
swarm-manager   -        virtualbox   Running   tcp://192.168.99.100:2376           v1.12.4
swarm-worker1   -        virtualbox   Running   tcp://192.168.99.101:2376           v1.12.4
➜  ~ docker-machine ip swarm-manager
192.168.99.100
➜  ~ docker-machine ip swarm-worker1
192.168.99.101
➜  ~

Create a Swarm Manage node

SSH to swarm-manager host and init a manager node.

➜  ~ docker-machine ssh swarm-manager
docker@swarm-manager:~$ docker swarm init --advertise-addr 192.168.99.100
Swarm initialized: current node (7f2gi8xoz6prs2gi53nqa4wu8) is now a manager.

To add a worker to this swarm, run the following command:

    docker swarm join \
    --token SWMTKN-1-58lrmtavqlt9v1ejujsfh5o9hf3p804xtn5qhnsriqw4an2vhd-8x1q7q4jpvs1govwmjhnhffo7 \
    192.168.99.100:2377

To add a manager to this swarm, run 'docker swarm join-token manager' and follow the instructions.

docker@swarm-manager:~$

From command docker info we can get the current information about this swarm cluster.

Add one Docker Node to the Swarm cluster

Just run the command generated by swarm init last step in the other docker machine host. Please make sure the swarm-worker1 host can access 192.168.99.100:2377

➜  ~ docker-machine ssh swarm-worker1
docker@swarm-worker1:~$ docker swarm join \
        --token SWMTKN-1-58lrmtavqlt9v1ejujsfh5o9hf3p804xtn5qhnsriqw4an2vhd-8x1q7q4jpvs1govwmjhnhffo7 \
        192.168.99.100:2377
This node joined a swarm as a worker.
docker@swarm-worker1:~$

We can check the cluster status on manager node:

➜  ~ docker-machine ssh swarm-manager
Boot2Docker version 1.12.4, build HEAD : d0b8fd8 - Tue Dec 13 18:21:26 UTC 2016
Docker version 1.12.4, build 1564f02
docker@swarm-manager:~$ docker node ls
ID                           HOSTNAME       STATUS  AVAILABILITY  MANAGER STATUS
7f2gi8xoz6prs2gi53nqa4wu8 *  swarm-manager  Ready   Active        Leader
9mm8t4l5stcudn5tx1fweht1d    swarm-worker1  Ready   Active
docker@swarm-manager:~$

And there are two networks automatically created on these two hosts:

docker@swarm-manager:~$ sudo docker network ls
NETWORK ID          NAME                DRIVER              SCOPE
f773d9bee59f        bridge              bridge              local
bcc7996ba96b        docker_gwbridge     bridge              local
a2d7040abdd0        host                host                local
01y2wr8jucgf        ingress             overlay             swarm
8fde4990cff2        none                null                local
docker@swarm-manager:~$
docker@swarm-worker1:~$ sudo docker network ls
NETWORK ID          NAME                DRIVER              SCOPE
470f8e1db857        bridge              bridge              local
18bcb76c26b0        docker_gwbridge     bridge              local
1e347b54188e        host                host                local
01y2wr8jucgf        ingress             overlay             swarm
9ba27b95c9ad        none                null                local
docker@swarm-worker1:~$

The first is docker_gwbridge and the second is ingress, one is bridge network, and the other is overlay network.