Docker ~ Swarm builds a highly available docker cluster and swarmdocker
Back to directory
Swarm Concept
Swarm is a Docker company launched to manage docker clusters. It turns a group of Docker hosts into a single, virtual host. Swarm uses standard Docker API interfaces as its front-end access portals. in other words, various forms of Docker clients (such as docker Client in Go, docker_py, and docker) can communicate directly with Swarm. Almost all Swarm is developed using the go language. Swarm0.2 is released. Compared with version 0.1, version 0.2 adds a new policy to schedule containers in the cluster so that they can be spread on available nodes, and supports more Docker commands and cluster drivers.
Swarm deamon is only a sched and a router. Swarm does not run containers by itself. It only accepts requests sent from the docker client and schedules suitable nodes to run containers, this means that even if Swarm fails for some reason, the nodes in the cluster will run as usual. After Swarm resumes running, it will collect and reconstruct the cluster information.
Swarm Structure
Basic Swarm commands
Docker node is used to display the cluster nodes. By default, only one node is created, which of course cannot be highly available. You can use docker node -- help to view all node parameters.
Cluster initialization docker swarm init
After initialization, you cannot re-execute this operation. Use docker node ls to view the created Cluster.
Manage nodes and work nodes in the Cluster
ADD management node docker swarm join
Some options need to be added to the Docker Swarm command:
* join: indicates that a new node will be added to Swarm
* –Manager: indicate the nature of the node (manager vs worker)
* --Listen-addr: Allow a newly added node to access other nodes in Swarm
* The last parameter is the address of the first management node (that is, the node to which this command will be sent)
Note: Because the –auto-accept manager option is provided during the Swarm initialization process, the second management node is automatically accepted. Without this option, the second management node needs to be manually accepted by the first management node.
$ MANAGER2_IP = $ (docker-machine ip manager2)
docker-machine ssh manager2 docker swarm join --manager --listen-addr $ MANAGER2_IP: 2377 $ MANAGER1_IP: 2377
The script used for Swarn deployment, from the network
The following is a Shell script used to create a Docker host and deploy Swarm. Of course, the number of management/work nodes can be changed at will.
Note: creating two management nodes and two working nodes is only used for demonstration. In industrial production, we may need to build three management nodes and five work nodes in the cluster.
# Define the number of managers/workers
MANAGER=3
WORKER=5
# Create the Docker hosts
for i in $(seq 1 $MANAGER); do docker-machine create --driver virtualbox manager$i; done
for i in $(seq 1 $WORKER); do docker-machine create --driver virtualbox worker$i; done
# Init the swarm
docker-machine ssh manager1 docker swarm init --auto-accept manager --auto-accept worker --listen-addr $(docker-machine ip manager1):2377
# Add additional manager(s)
for i in $(seq 2 $MANAGER); do docker-machine ssh manager$i docker swarm join --manager --listen-addr $(docker-machine ip manager$i):2377 $(docker-machine ip manager1):2377; done
# Add workers
for i in $(seq 1 $WORKER); do docker-machine ssh worker$i docker swarm join --listen-addr $(docker-machine ip worker$i):2377 $(docker-machine ip manager1):2377; done
For the cluster mentioned in the above article, we didn't talk about how to use it. After creating a cluster, we can use
Docker stack deploy-c test. yml test
Below is a self-Written service, version 3
version: "3"
services:
loggerapi:
image: logger.api
build:
context: ./src/Logger.Api
dockerfile: Dockerfile
ports:
- "5000:80"
networks:
- ingress
loggermanager:
image: logger.manager
build:
context: ./src/Logger.Manager
dockerfile: Dockerfile
ports:
- "5050:80"
networks:
- ingress
networks:
ingress:
Note that the name of a service must be different. For example, logger. manager is incorrect!
To create a service. You can also use docker service to view the running service!
Back to directory