2016-11-19

Docker Swarm


Docker Swarm

What's New in Docker 1.12
Overview of new features
  • Orchestration
    • Swarm mode
    • Docker services
    • Secure by default
    • Networking
  • Live Restore
  • Container Healthchecks
  • Plugin Improvements
    http://forum.slitaz.org/topic/slitaz-x86_64#post-43393

Swarm mode overview
https://docs.docker.com/engine/swarm/
Docker Engine 1.12 includes swarm mode for natively managing a cluster of Docker Engines called a swarm. Use the Docker CLI to create a swarm, deploy application services to a swarm, and manage swarm behavior.

1. Setup docker engine (docker)
root@slitaz:~# docker-machine create -d virtualbox default


root@slitaz:~# docker-machine env default
export DOCKER_TLS_VERIFY="1"
export DOCKER_HOST="tcp://192.168.99.100:2376"
export DOCKER_CERT_PATH="/root/.docker/machine/machines/default"
export DOCKER_MACHINE_NAME="default"
# Run this command to configure your shell:
# eval $(docker-machine env default)

root@slitaz:~# eval $(docker-machine env default)

root@slitaz:~# docker-machine ls
NAME    ACTIVE   DRIVER       STATE     URL                        SWARM   DOCKER    ERRORS
default   *      virtualbox   Running   tcp://192.168.99.100:2376          v1.12.3   

root@slitaz:~# docker-machine create -d virtualbox worker2
[..]

root@slitaz:~# docker-machine create -d virtualbox worker3
[..]

root@slitaz:~# docker-machine ls
NAME     ACTIVE  DRIVER       STATE     URL                       SWARM   DOCKER    ERRORS
default   *      virtualbox   Running   tcp://192.168.99.100:2376         v1.12.3   
worker2   -      virtualbox   Running   tcp://192.168.99.101:2376         v1.12.3   
worker3   -      virtualbox   Running   tcp://192.168.99.102:2376         v1.12.3   
root@slitaz:~#


2. Create a swarm
Manager / Leader : slitaz
tux@slitaz:~$ docker swarm init --advertise-addr 192.168.1.30:2377
Swarm initialized: current node (7k82hqkla3pfx2l5n1mg86nqz) is now a manager.


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

docker swarm join \
--token SWMTKN-1-0j1kwrl6tx3zujd1b5unnu6kxn3sn1zylgkueq4e10t4w8mxzc-8fzj4535sg0lttajyuw431rhq \
192.168.1.30:2377

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

tux@slitaz:~$ docker node ls
ID                          HOSTNAME  STATUS  AVAILABILITY  MANAGER STATUS
7k82hqkla3pfx2l5n1mg86nqz *  slitaz   Ready   Active        Leader

tux@slitaz:~$ docker info | grep -A16 Swarm
Swarm: active
NodeID: 7k82hqkla3pfx2l5n1mg86nqz
Is Manager: true
ClusterID: dfg1s9cfwoi0ep88d36c44c2s
Managers: 1
Nodes: 1
Orchestration:
Task History Retention Limit: 5
Raft:
Snapshot Interval: 10000
Heartbeat Tick: 1
Election Tick: 3
Dispatcher:
Heartbeat Period: 5 seconds
CA Configuration:
Expiry Duration: 3 months
Node Address: 192.168.1.30
tux@slitaz:~$

Add nodes to the swarm
node : worker2
tux@slitaz:~$ docker-machine ssh worker2

docker@worker2:~$ docker swarm join \
>--token SWMTKN-1-0j1kwrl6tx3zujd1b5unnu6kxn3sn1zylgkueq4e10t4w8mxzc-8fzj4535sg0lttajyuw431rhq \
> 192.168.1.30:2377
This node joined a swarm as a worker.

docker@worker2:~$ docker info | grep -E 'Swarm|Node|Name|Manager|provider'
Swarm: active
NodeID: 6l6q31l3ojjanmbrkdsaydcd3
Is Manager: false
Node Address: 10.0.2.15
Name: worker2
provider=virtualbox

node : worker3
tux@slitaz:~$ docker-machine ssh worker3

docker@worker3:~$ docker swarm join \
> --token SWMTKN-1-0j1kwrl6tx3zujd1b5unnu6kxn3sn1zylgkueq4e10t4w8mxzc-8fzj4535sg0lttajyuw431rhq \
> 192.168.1.30:2377
This node joined a swarm as a worker.

docker@worker3:~$ docker info | grep -E 'Swarm|Node|Name|Manager|provider'
Swarm: active
NodeID: d9acvt55txmtru7kx4c68vj4k
Is Manager: false
Node Address: 10.0.2.15
Name: worker3
provider=virtualbox

node : default
tux@slitaz:~$ docker-machine ssh default

docker@default:~$ docker swarm join \
> --token SWMTKN-1-0j1kwrl6tx3zujd1b5unnu6kxn3sn1zylgkueq4e10t4w8mxzc-8fzj4535sg0lttajyuw431rhq \
> 192.168.1.30:2377
This node joined a swarm as a worker.

docker@default:~$ docker info | grep -E 'Swarm|Node|Name|Manager|provider'
Swarm: active
NodeID: 5f0tcycycbvld9k9o2lw7zkr3
Is Manager: false
Node Address: 10.0.2.15
Name: default
provider=virtualbox


3. Four networked host machines
tux@slitaz:~$ docker node ls
ID                           HOSTNAME  STATUS  AVAILABILITY  MANAGER STATUS
5f0tcycycbvld9k9o2lw7zkr3    default   Ready   Active       
6l6q31l3ojjanmbrkdsaydcd3    worker2   Ready   Active 
7k82hqkla3pfx2l5n1mg86nqz *  slitaz    Ready   Active        Leader
d9acvt55txmtru7kx4c68vj4k    worker3   Ready   Active           
tux@slitaz:~$

4. Deploy a service to the swarm
tux@slitaz:~$ docker service create --replicas 1 --name helloworld slitaz/slitaz-base ping docker.com
cajm42r93yb27tft0e6c7qxpw
The docker service create command creates the service.
  • The --name flag names the service helloworld.
  • The --replicas flag specifies the desired state of 1 running instance.
  • The arguments slitaz/slitaz-base ping docker.com define the service as
    an SliTaz Linux container that executes the command ping docker.com.
tux@slitaz:~$ docker service ls ID NAME REPLICAS IMAGE COMMAND cajm42r93yb2 helloworld 1/1 slitaz/slitaz-base ping docker.com tux@slitaz:~$ docker service ps helloworld ID NAME IMAGE NODE DESIRED STATE CURRENT STATE ERROR 002tslyqae2iapb6g56fqd7ax helloworld.1 slitaz/slitaz-base slitaz Running Running 47 seconds ago tux@slitaz:~$ docker service inspect --pretty helloworld ID: cajm42r93yb27tft0e6c7qxpw Name: helloworld Mode: Replicated Replicas: 1 Placement: UpdateConfig: Parallelism: 1 On failure: pause ContainerSpec: Image: slitaz/slitaz-base Args: ping docker.com Resources: tux@slitaz:~$ docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 871129d798d0 slitaz/slitaz-base:latest "ping docker.com" About a minute ago Up About a minute helloworld.1.002tslyqae2iapb6g56fqd7ax tux@slitaz:~$


5. Scale the service in the swarm
tux@slitaz:~$ docker service scale helloworld=6
helloworld scaled to 6

tux@slitaz:~$ docker service ls
ID            NAME        REPLICAS  IMAGE               COMMAND
cajm42r93yb2  helloworld  6/6       slitaz/slitaz-base  ping docker.com

tux@slitaz:~$ docker service ps helloworld
ID                         NAME          IMAGE               NODE   DESIRED STATE  CURRENT STATE           ERROR
002tslyqae2iapb6g56fqd7ax  helloworld.1  slitaz/slitaz-base  slitaz   Running      Running 3 minutes  ago   
58j491vemqivnwrqaz81pq9nb  helloworld.2  slitaz/slitaz-base  worker2  Running      Running 20 seconds ago  
3t58mrccan0nflvoar6k3ffaq  helloworld.3  slitaz/slitaz-base  default  Running      Running 21 seconds ago  
e54f675l6ur7lc2k4xswltt98  helloworld.4  slitaz/slitaz-base  worker3  Running      Running 21 seconds ago  
dydeu3rwuttjrc6rh8ke3d1hf  helloworld.5  slitaz/slitaz-base  worker3  Running      Running 21 seconds ago  
e8m5wdmesa16pwtme10t1lrju  helloworld.6  slitaz/slitaz-base  slitaz   Running      Running 24 seconds ago  

tux@slitaz:~$ docker ps
CONTAINER ID        IMAGE                       COMMAND             CREATED             STATUS           PORTS                 NAMES
ca20de8a3bca        slitaz/slitaz-base:latest   "ping docker.com"   37 seconds ago      Up 35 seconds                          helloworld.6.e8m5wdmesa16pwtme10t1lrju
871129d798d0        slitaz/slitaz-base:latest   "ping docker.com"   3 minutes ago       Up 3 minutes                           helloworld.1.002tslyqae2iapb6g56fqd7ax
tux@slitaz:~$


6. Node Failure
tux@slitaz:~$ docker-machine ssh worker2

docker@worker2:~$ docker swarm leave
Node left the swarm.

tux@slitaz:~$ docker node ls
ID                           HOSTNAME    STATUS  AVAILABILITY  MANAGER STATUS
5f0tcycycbvld9k9o2lw7zkr3    default     Ready   Active       
6l6q31l3ojjanmbrkdsaydcd3    worker2    Down   Active  
7k82hqkla3pfx2l5n1mg86nqz *  slitaz      Ready   Active        Leader
d9acvt55txmtru7kx4c68vj4k    worker3     Ready   Active       
tux@slitaz:~$

tux@slitaz:~$ docker service ps helloworld
ID                         NAME              IMAGE               NODE     DESIRED STATE  CURRENT STATE       ERROR
002tslyqae2iapb6g56fqd7ax  helloworld.1      slitaz/slitaz-base  slitaz   Running        Running 26 minutes ago  
106h3vekgktnm2qhklmh7fu3a  helloworld.2      slitaz/slitaz-base  default  Running        Running 31 seconds ago  
58j491vemqivnwrqaz81pq9nb  \_ helloworld.2   slitaz/slitaz-base  worker2 Shutdown      Running 23 minutes ago  
3t58mrccan0nflvoar6k3ffaq  helloworld.3      slitaz/slitaz-base  default  Running        Running 23 minutes ago  
e54f675l6ur7lc2k4xswltt98  helloworld.4      slitaz/slitaz-base  worker3  Running        Running 23 minutes ago  
dydeu3rwuttjrc6rh8ke3d1hf  helloworld.5      slitaz/slitaz-base  worker3  Running        Running 23 minutes ago  
e8m5wdmesa16pwtme10t1lrju  helloworld.6      slitaz/slitaz-base  slitaz   Running        Running 23 minutes ago  

tux@slitaz:~$ docker service ls
ID            NAME        REPLICAS  IMAGE               COMMAND
cajm42r93yb2  helloworld  6/6       slitaz/slitaz-base  ping docker.com


7. Update the service in the swarm
tux@slitaz:~$ docker service update --replicas 10 helloworld
helloworld

tux@slitaz:~$ docker service ls
ID            NAME        REPLICAS  IMAGE               COMMAND
cajm42r93yb2  helloworld  10/10     slitaz/slitaz-base  ping docker.com

tux@slitaz:~$ docker service ps helloworld
ID                         NAME              IMAGE               NODE     DESIRED STATE  CURRENT STATE       ERROR
002tslyqae2iapb6g56fqd7ax  helloworld.1      slitaz/slitaz-base  slitaz   Running        Running 31 minutes ago  
106h3vekgktnm2qhklmh7fu3a  helloworld.2      slitaz/slitaz-base  default  Running        Running 5  minutes ago   
58j491vemqivnwrqaz81pq9nb  \_ helloworld.2   slitaz/slitaz-base  worker2 Shutdown      Running 28 minutes ago  
3t58mrccan0nflvoar6k3ffaq  helloworld.3      slitaz/slitaz-base  default  Running        Running 28 minutes ago  
e54f675l6ur7lc2k4xswltt98  helloworld.4      slitaz/slitaz-base  worker3  Running        Running 28 minutes ago  
dydeu3rwuttjrc6rh8ke3d1hf  helloworld.5      slitaz/slitaz-base  worker3  Running        Running 28 minutes ago  
e8m5wdmesa16pwtme10t1lrju  helloworld.6      slitaz/slitaz-base  slitaz   Running        Running 28 minutes ago  
8xwx4qqtuelrw6ab1uk6epgoz  helloworld.7      slitaz/slitaz-base  worker3  Running        Running 31 seconds ago  
dzd1fbsvfphkk9z1uik0y87l9  helloworld.8      slitaz/slitaz-base  default  Running        Running 31 seconds ago  
0x5gk6gaggltd25uadol6sf8l  helloworld.9      slitaz/slitaz-base  slitaz   Running        Running 31 seconds ago  
18hngsz3uuzsg7pwe6tyf6jnl  helloworld.10     slitaz/slitaz-base  worker3  Running        Running 30 seconds ago  

tux@slitaz:~$ docker ps
CONTAINER ID        IMAGE                       COMMAND             CREATED             STATUS          PORTS                    NAMES
c1d6ccc0fc66        slitaz/slitaz-base:latest   "ping docker.com"   50 seconds ago      Up 48 seconds                            helloworld.9.0x5gk6gaggltd25uadol6sf8l
98021375dad6        manomarks/visualizer        "npm start"         18 minutes ago      Up 18 minutes   0.0.0.0:8080->8080/tcp   nostalgic_turing
ca20de8a3bca        slitaz/slitaz-base:latest   "ping docker.com"   29 minutes ago      Up 29 minutes                            helloworld.6.e8m5wdmesa16pwtme10t1lrju
871129d798d0        slitaz/slitaz-base:latest   "ping docker.com"   32 minutes ago      Up 32 minutes                            helloworld.1.002tslyqae2iapb6g56fqd7ax
tux@slitaz:~$


8. Delete the service running on the swarm
tux@slitaz:~$ docker service rm helloworld
helloworld

tux@slitaz:~$ docker service ps helloworld
Error: No such service: helloworld


Ref:
swarm mode tutorial
https://docs.docker.com/engine/swarm/swarm-tutorial/