- swarm init
- swarm join
- service create
- service inspect
- service ls
- service rm
- service scale
- service ps
- service update
On Machine 1 (master)
$ private_ip="10.130.63.96"
$ docker swarm init --advertise-addr "$private_ip"
Swarm initialized: current node (umkbjkcectb1vaxgh87djq6c6) is now a manager.
To add a worker to this swarm, run the following command:
docker swarm join --token SWMTKN-1-5etpbtmjby634yoe8smr6piyn4a98q83pqnenec3hyymbv0fch-1af319govc5ug3tl17dene7w0 10.130.63.96:2377
To add a manager to this swarm, run 'docker swarm join-token manager' and follow the instructions.On Machine 2 (slave)
$ docker swarm join --token SWMTKN-1-5etpbtmjby634yoe8smr6piyn4a98q83pqnenec3hyymbv0fch-1af319govc5ug3tl17dene7w0 10.130.63.96:2377On Machien 3 (slave)
$ docker swarm join --token SWMTKN-1-5etpbtmjby634yoe8smr6piyn4a98q83pqnenec3hyymbv0fch-1af319govc5ug3tl17dene7w0 10.130.63.96:2377Check cluster's information
$ docker node ls
ID HOSTNAME STATUS AVAILABILITY MANAGER STATUS
umkbjkcectb1vaxgh87djq6c6 * coreos-s-1vcpu-1gb-sgp1-01 Ready Active Leader
wrz5r89fy7gp3nq5ny8o6ywqc coreos-s-1vcpu-1gb-sgp1-02 Ready Active
rqs8cv9jm6x8yjda2ztstk32u coreos-s-1vcpu-1gb-sgp1-03 Ready Active# 1 replicas
$ docker service create --replicas 1 --name webserver nginx
# 3 replicas
$ docker service create --replicas 3 --name backendweb nginxshow the services
$ docker service ls
ID NAME MODE REPLICAS IMAGE PORTS
v9vh25a4pp61 backendweb replicated 1/3 nginx:latest
osfj56c5fgbl webserver replicated 1/1 nginx:latest$ docker inspect --pretty webserver
ID: osfj56c5fgbl3knggfub1ul2o
Name: webserver
Service Mode: Replicated
Replicas: 1
Placement:
UpdateConfig:
Parallelism: 1
On failure: pause
Monitoring Period: 5s
Max failure ratio: 0
Update order: stop-first
RollbackConfig:
Parallelism: 1
On failure: pause
Monitoring Period: 5s
Max failure ratio: 0
Rollback order: stop-first
ContainerSpec:
Image: nginx:latest@sha256:4771d09578c7c6a65299e110b3ee1c0a2592f5ea2618d23e4ffe7a4cab1ce5de
Resources:
Endpoint Mode: vip
$ docker service scale webserver=6
$ docker service ls
ID NAME MODE REPLICAS IMAGE PORTS
v9vh25a4pp61 backendweb replicated 3/3 nginx:latest
osfj56c5fgbl webserver replicated 6/6 nginx:latest$ docker service rm backendweb
backendweb
$ docker service ls
ID NAME MODE REPLICAS IMAGE PORTS
osfj56c5fgbl webserver replicated 6/6 nginx:latestStart a redis service from redis:3.2.11-alpine
$ docker service create \
--replicas 3 \
--name redis \
--update-delay 10s \
redis:3.2.11-alpine
zlc6u7ond1r29jwm9bv5v6oj7
$ docker service ls
docker service ls
ID NAME MODE REPLICAS IMAGE PORTS
zlc6u7ond1r2 redis replicated 3/3 redis:3.2.11-alpine
osfj56c5fgbl webserver replicated 6/6 nginx:latestUpdate redis version
$ docker service update --image redis:4.0.8-alpine redis
$ docker service ls
ID NAME MODE REPLICAS IMAGE PORTS
zlc6u7ond1r2 redis replicated 3/3 redis:4.0.8-alpine
osfj56c5fgbl webserver replicated 6/6 nginx:latestGet update info
$ docker service inspect --pretty redis Watch the rolling update
$ docker service ps redis
ID NAME IMAGE NODE DESIRED STATE CURRENT STATE ERROR PORTS
spxopuiosy4o redis.1 redis:4.0.8-alpine coreos-s-1vcpu-1gb-sgp1-03 Running Running 2 minutes ago
6d908gm5gvsd \_ redis.1 redis:3.2.11-alpine coreos-s-1vcpu-1gb-sgp1-03 Shutdown Shutdown 2 minutes ago
i2zri4rki21l redis.2 redis:4.0.8-alpine coreos-s-1vcpu-1gb-sgp1-01 Running Running 2 minutes ago
m3q9omxm2ufj \_ redis.2 redis:3.2.11-alpine coreos-s-1vcpu-1gb-sgp1-01 Shutdown Shutdown 2 minutes ago
jkn30y98qb4e redis.3 redis:4.0.8-alpine coreos-s-1vcpu-1gb-sgp1-02 Running Running about a minute ago
rshtv0qsy0pa \_ redis.3 redis:3.2.11-alpine coreos-s-1vcpu-1gb-sgp1-02 Shutdown Shutdown about a minute agoDRAIN availability prevents a node from receiving new tasks from the swarm manager
$ docker node update --availability drain coreos-s-1vcpu-1gb-sgp1-02
coreos-s-1vcpu-1gb-sgp1-02
$ docker node ls
ID HOSTNAME STATUS AVAILABILITY MANAGER STATUS
umkbjkcectb1vaxgh87djq6c6 * coreos-s-1vcpu-1gb-sgp1-01 Ready Active Leader
wrz5r89fy7gp3nq5ny8o6ywqc coreos-s-1vcpu-1gb-sgp1-02 Ready Drain
rqs8cv9jm6x8yjda2ztstk32u coreos-s-1vcpu-1gb-sgp1-03 Ready Active
$ docker service ps web
ID NAME IMAGE NODE DESIRED STATE CURRENT STATE ERROR PORTS
0u4c678mh4px web.1 nginx:latest coreos-s-1vcpu-1gb-sgp1-03 Running Running 51 seconds ago
xx04i1qst907 web.2 nginx:latest coreos-s-1vcpu-1gb-sgp1-01 Running Running 51 seconds ago
xn8sh7skrcwz web.3 nginx:latest coreos-s-1vcpu-1gb-sgp1-03 Running Running 51 seconds ago
# ending the task on a node with Drain availability and creating a new task on a node with Active availability
$ docker node update --availability active coreos-s-1vcpu-1gb-sgp1-02
coreos-s-1vcpu-1gb-sgp1-02
$ docker node ls
ID HOSTNAME STATUS AVAILABILITY MANAGER STATUS
umkbjkcectb1vaxgh87djq6c6 * coreos-s-1vcpu-1gb-sgp1-01 Ready Active Leader
wrz5r89fy7gp3nq5ny8o6ywqc coreos-s-1vcpu-1gb-sgp1-02 Ready Active
rqs8cv9jm6x8yjda2ztstk32u coreos-s-1vcpu-1gb-sgp1-03 Ready ActiveAll nodes participate in an ingress routing mesh to publish ports for services to make them available to resources outside the swarm
$ docker service create \
> --name my-web \
> --publish published=8080,target=80 \
> --replicas 2 \
> nginx
$ curl 128.199.193.7:8080Publish port from existing service
$ docker service ls
ID NAME MODE REPLICAS IMAGE PORTS
uuks7qyio10o my-web replicated 2/2 nginx:latest *:8080->80/tcp
zlc6u7ond1r2 redis replicated 3/3 redis:4.0.8-alpine
ksyqibiw7hz7 web replicated 3/3 nginx:latest
osfj56c5fgbl webserver replicated 6/6 nginx:latest
$ docker service update --publish-add published=8888,target=80 webserver
webserver
docker service ls
ID NAME MODE REPLICAS IMAGE PORTS
uuks7qyio10o my-web replicated 2/2 nginx:latest *:8080->80/tcp
zlc6u7ond1r2 redis replicated 3/3 redis:4.0.8-alpine
ksyqibiw7hz7 web replicated 3/3 nginx:latest
osfj56c5fgbl webserver replicated 5/6 nginx:latest *:8888->80/tcp
$ curl 128.199.193.7:8888