This page looks best with JavaScript enabled

Docker Swarm mode setup

 ·  ☕ 3 min read

    Starting with version 1.21, docker engine includes native support for “swarm” mode. Newly introduced services can now be deployed, scaled and managed on the docker swarm cluster. Cluster management and orchestration commands are directly embedded in docker engine but you can still use docker engine in “standalone” mode to manage individual containers.

    There is already an excellent getting started guide provided by official docker documentation that can help you in understanding main concepts of the swarm mode.

    I have prepared four Ubuntu 16.04 VM’s that will act as a nodes in Swarm cluster. One node will act as a “master node” dmaster1 and other three dnode1, dnode2 and dnode3 will be worker nodes.

    To install docker engine on these vanilla Ubuntu 16.04 servers, you can follow official documentation, or use this pre-cooked script:

    1
    2
    3
    4
    5
    6
    
    sudo apt-key adv --keyserver hkp://p80.pool.sks-keyservers.net:80 --recv-keys 58118E89F3A912897C070ADBF76221572C52609D
    echo "deb https://apt.dockerproject.org/repo ubuntu-xenial main" | sudo tee /etc/apt/sources.list.d/docker.list
    sudo apt-get update
    sudo apt-get install -y linux-image-extra-$(uname -r)
    sudo apt-get install -y docker-engine
    sudo service docker start
    

    To test your installation you can run sudo docker run hello-world and you should see following message if your installation was successful:

     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    
    Hello from Docker!
    This message shows that your installation appears to be working correctly.
    
    To generate this message, Docker took the following steps:
     1. The Docker client contacted the Docker daemon.
     2. The Docker daemon pulled the "hello-world" image from the Docker Hub.
     3. The Docker daemon created a new container from that image which runs the
        executable that produces the output you are currently reading.
     4. The Docker daemon streamed that output to the Docker client, which sent it
        to your terminal.
    
    To try something more ambitious, you can run an Ubuntu container with:
     $ docker run -it ubuntu bash
    
    Share images, automate workflows, and more with a free Docker Hub account:
     https://hub.docker.com
    
    For more examples and ideas, visit:
     https://docs.docker.com/engine/userguide/
    

    Next steps are creating the Swarm and with docker 1.21 this is super simple (comparing to older docker versions) by executing “swarm init” on the master node:

    1
    
    sudo docker swarm init --advertise-addr <MANAGER-IP>
    

    where MANAGER-IP is ip address of your master server. Output of this command will immediately give you commands that you need to run on your worker nodes or on additional master nodes, in case you would like to create HA setup, so that they can be added to your cluster, e.g.

     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    
    Swarm initialized: current node (dxn1zf6l61qsb1josjja83ngz) is now a manager.
    
    To add a worker to this swarm, run the following command:
        docker swarm join \
        --token SWMTKN-1-49nj1cmql0jkz5s954yi3oex3nedyz0fb0xx14ie39trti4wxv-8vxv8rssmk743ojnwacrr2e7c \
        192.168.99.100:2377
    
    To add a manager to this swarm, run the following command:
        docker swarm join \
        --token SWMTKN-1-61ztec5kyafptydic6jfc1i33t37flcl4nuipzcusor96k7kby-5vy9t8u35tuqm7vh67lrz9xp6 \
        192.168.99.100:2377
    

    After executing appropriate join commands on the worker nodes we have our swarm cluster ready for first services

    1
    2
    3
    4
    5
    6
    
    perica@dmaster1 ➜  ~ sudo docker node ls
    ID                           HOSTNAME  STATUS  AVAILABILITY  MANAGER STATUS
    39vfad94n4iz8sadjk6yzmi5y    dnode1    Ready   Active        
    40kefl5citf9ej4t6gc97qqdr    dnode3    Ready   Active        
    8zcet33teixl63tj66at338v3    dnode2    Ready   Active        
    b2vf4qy6sq1sc56mwole8zngc *  dmaster1  Ready   Active        Leader
    
    Share on

    Perica Zivkovic
    WRITTEN BY
    Perica Zivkovic
    Earthling