Docker Swarm
What's New in Docker 1.12http://forum.slitaz.org/topic/slitaz-x86_64#post-43393
Overview of new features
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.
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/