Day 40 : Docker Swarm Commands #90DaysofDevOps

Day 40 : Docker Swarm Commands #90DaysofDevOps

Swarm is Docker’s in built containers orchestrator solution, its main purpose is to manage containers in a computer cluster, i.e. a set of connected computers that work together. Swarm comes built into the Docker Engine, you don’t need to install anything to get started.

In Docker, there are many layers of encapsulation: the OS kernel, containers, tasks that encapsulate containers as units of work, services or Pods that represent application components, and stacks(collection of services) that represent full applications.


Install docker with

curl -ssl https://get.docker.com | bash        

Preparing the server

Create several instances of the one-click docker image on Ubuntu 14.

Initialize the swarm

Log into the server you want to be your manager and run:

docker swarm init --advertise-addr server_ip_address        

It will give you a command to paste into the other servers. Paste the worker command into the other instances to join this server as a worker and the manager command to join as a manager.

Get worker join command

If you forgot the command or didn’t save it somewhere you can ssh back into a manager server and run.

docker swarm join-token worker        

Get manager join command

docker swarm join-token manager        

Enabling experimental features

Some commands won’t work in the default Digital Ocean instances. You can enable some of these commands by editing /etc/default/docker file.

nano /etc/default/dockerDOCKER_OPTS="--experimental=true"        

After making edits restart docker

service docker restart        

How to setup your domain name

When you connect a domain name to your ip, add A records for a few ip addresses in the swarm so if one fails the domain can connect through the other. The built-in load-balancer runs on every instance so even pointing your domain to a worker node ip will work.

Upload files to server

scp -r environment.env .env production.yml root@server_ip:~/        

Deploy a new stack or update an existing stack from a compose file

SSH into your manager server. These commands only work from a manager.

ssh root@server_ip        

NOTE: The new prune feature removes services no longer referenced in the compose file on updates. It may not work on your version of docker.

NOTE: Each time you run deploy it will override any manual scaling you have done to individual services and instead match the yml file scale parameters.

env $(cat .env | grep ^[A-Z] | xargs) docker stack deploy -c production.yml --with-registry-auth --prune stack_name        

env $(cat .env | grep ^[A-Z] | xargs) will read variables in the .env file into your deployment.

See services running

docker stack services stack_name        

See Logs for a service

stack_name_ + service_name

docker service logs stack_name_service_name        

Scale a service

Creates more instances of a services containers and distributes them across qualified nodes.

docker service scale STACK_NAME_SERVICE_NAME=REPLICAS        

Ex:

docker service scale main_api=3        

Find out what nodes there are and which are managers

docker node ls        

Promote a worker node to manager

You get the node_name from docker node ls

docker node promote node_name        

List running swarms

docker stack ls        

Remove an entire swarm

WARNING: Deletes all volume data (such as database information)

docker stack rm stack_name        

Have a node leave a swarm

docker swarm leave        

If you lose a majority of managers

Docker swarm always requires a majority of mangers out of the total number of managers to be running. So if you have 5 managers, you can only lose two and still have a majority. If you have 3 managers you can only lose 1 and still have a majority.

However if you lose the majority you can reinitialize a majority by forcing a new swarm. Just go to 1 manager node still running and run

docker swarm init --force-new-cluster --advertise-addr your_ip        

This will remove all other managers and leave only the one you’re in as a manager, which will be the new majority. Then you can promote other nodes to managers. It will still be aware of your containers and running services and volumes and shouldn’t interfere. However until you force a new cluster you can’t alter, add, or remove any of the running services.

Force a rebalance of containers after adding a new node to the stack

It’s better to use scale services to gradually add containers to a new node, however you can relaunch all containers to distribute to all nodes including the one added.

NOTE: This will disrupt production

docker service ls -q > dkr_svcs && for i in `cat dkr_svcs`; do docker service update "$i" --detach=false --force ; done        

要查看或添加评论,请登录

Ayushi Tiwari的更多文章

社区洞察

其他会员也浏览了