Docker
Docker-svärmläge
Sök…
Introduktion
En svärm är ett antal Docker-motorer (eller noder ) som distribuerar tjänster kollektivt. Swarm används för att distribuera behandling över många fysiska, virtuella eller molnmaskiner.
Syntax
Initiera en svärm : docker-svärm init [OPTIONS]
Gå med i en svärm som nod och / eller chef : docker-svärm gå med [OPTIONS] HOST: PORT
Skapa en ny tjänst : dockningstjänst skapa [OPTIONS] IMAGE [COMMAND] [ARG ...]
Visa detaljerad information om en eller flera tjänster : dockningstjänst inspektera [OPTIONS] SERVICE [SERVICE ...]
Lista tjänster : docker tjänster ls [ALTERNATIV]
Ta bort en eller flera tjänster : dockningservice rm SERVICE [SERVICE ...]
Skala en eller flera replikerade tjänster : dockarserviceskala SERVICE = REPLICAS [SERVICE = REPLICAS ...]
Lista uppgifterna för en eller flera tjänster : dockningstjänst ps [OPTIONS] SERVICE [SERVICE ...]
Uppdatera en tjänst : uppdatering av dockningstjänst [OPTIONS] SERVICE
Anmärkningar
Svärmläget implementerar följande funktioner:
- Klusterhantering integrerad med Docker Engine
- Decentraliserad design
- Deklarativ servicemodell
- skalning
- Önskad statlig försoning
- Nätverk med flera värdar
- Serviceupptäckt
- Lastbalansering
- Säker design som standard
- Rullande uppdateringar
För mer officiell Docker-dokumentation beträffande Swarm-besök: Översikt över Swarm-läge
Swarm Mode CLI-kommandon
Klicka på kommandobeskrivningen för dokumentation
docker swarm init [OPTIONS]
Gå med i en svärm som nod och / eller chef
docker swarm join [OPTIONS] HOST:PORT
docker service create [OPTIONS] IMAGE [COMMAND] [ARG...]
Visa detaljerad information om en eller flera tjänster
docker service inspect [OPTIONS] SERVICE [SERVICE...]
docker service ls [OPTIONS]
Ta bort en eller flera tjänster
docker service rm SERVICE [SERVICE...]
Skala en eller flera replikerade tjänster
docker service scale SERVICE=REPLICAS [SERVICE=REPLICAS...]
Lista uppgifterna för en eller flera tjänster
docker service ps [OPTIONS] SERVICE [SERVICE...]
docker service update [OPTIONS] SERVICE
Skapa en svärm på Linux med dockningsmaskin och VirtualBox
# Create the nodes
# In a real world scenario we would use at least 3 managers to cover the fail of one manager.
docker-machine create -d virtualbox manager
docker-machine create -d virtualbox worker1
# Create the swarm
# It is possible to define a port for the *advertise-addr* and *listen-addr*, if none is defined the default port 2377 will be used.
docker-machine ssh manager \
docker swarm init \
--advertise-addr $(docker-machine ip manager)
--listen-addr $(docker-machine ip manager)
# Extract the Tokens for joining the Swarm
# There are 2 different Tokens for joining the swarm.
MANAGER_TOKEN=$(docker-machine ssh manager docker swarm join-token manager --quiet)
WORKER_TOKEN=$(docker-machine ssh manager docker swarm join-token worker --quiet)
# Join a worker node with the worker token
docker-machine ssh worker1 \
docker swarm join \
--token $WORKER_TOKEN \
--listen-addr $(docker-machine ip worker1) \
$(docker-machine ip manager):2377
Ta reda på arbetare och chef gå med token
När du automatiserar tillhandahållandet av nya noder till en svärm, måste du veta vad rätt kopplings-token är för svärmen såväl som den annonserade adressen för chefen. Du kan ta reda på detta genom att köra följande kommandon på någon av de befintliga hanteringsnoderna:
# grab the ipaddress:port of the manager (second last line minus the whitespace)
export MANAGER_ADDRESS=$(docker swarm join-token worker | tail -n 2 | tr -d '[[:space:]]')
# grab the manager and worker token
export MANAGER_TOKEN=$(docker swarm join-token manager -q)
export WORKER_TOKEN=$(docker swarm join-token worker -q)
Alternativet -q matar endast ut symbolet. Utan detta alternativ får du hela kommandot för att registrera dig till en svärm.
Sedan kan du ansluta till svärmen på nyligen tillhandahållna noder.
docker swarm join --token $WORKER_TOKEN $MANAGER_ADDRESS
Hej världen ansökan
Vanligtvis vill du skapa en bunt med tjänster för att bilda en replikerad och orkestrerad applikation.
En typisk modern webbapplikation består av en databas, api, frontend och reverse proxy.
Uthållighet
Databasen behöver uthållighet, så vi behöver något filsystem som delas över alla noderna i en svärm. Det kan vara NAS, NFS-server, GFS2 eller något annat. Det här är utanför tillämpningsområdet. För närvarande innehåller Docker inte och hanterar inte uthållighet i en svärm. Detta exempel antar att det finns /nfs/
delad plats monterad över alla noder.
Nätverk
För att kunna kommunicera med varandra måste tjänster i en svärm vara i samma nätverk.
Välj ett IP-område (här 10.0.9.0/24
) och nätverksnamn ( hello-network
) och kör ett kommando:
docker network create \
--driver overlay \
--subnet 10.0.9.0/24 \
--opt encrypted \
hello-network
Databas
Den första tjänsten vi behöver är en databas. Låt oss använda postgresql som ett exempel. Skapa en mapp för en databas i nfs/postgres
och kör denna:
docker service create --replicas 1 --name hello-db \
--network hello-network -e PGDATA=/var/lib/postgresql/data \
--mount type=bind,src=/nfs/postgres,dst=/var/lib/postgresql/data \
kiasaki/alpine-postgres:9.5
Lägg märke till att vi har använt --network hello-network
--mount
och --mount
.
API
Att skapa API ligger utanför detta exempel, så låt oss låtsas att du har en API-bild under username/hello-api
.
docker service create --replicas 1 --name hello-api \
--network hello-network \
-e NODE_ENV=production -e PORT=80 -e POSTGRESQL_HOST=hello-db \
username/hello-api
Lägg märke till att vi fick ett namn på vår databastjänst. Docker-svärmen har en inbäddad round-robin DNS-server, så API kommer att kunna ansluta till databasen med sitt DNS-namn.
Omvänd ombud
Låt oss skapa nginx-tjänst för att betjäna vår API till en yttre värld. Skapa nginx-konfigurationsfiler på en delad plats och kör detta:
docker service create --replicas 1 --name hello-load-balancer \
--network hello-network \
--mount type=bind,src=/nfs/nginx/nginx.conf,dst=/etc/nginx/nginx.conf \
-p 80:80 \
nginx:1.10-alpine
Lägg märke till att vi har använt alternativet -p
att publicera en port. Denna port skulle vara tillgänglig för alla noder i en svärm.
Nod Tillgänglighet
Swarm Mode Node Tillgänglighet:
- Aktiv betyder att schemaläggaren kan tilldela uppgifter till en nod.
- Paus betyder att schemaläggaren inte tilldelar nya uppgifter till noden, men befintliga uppgifter fortsätter att köras.
- Dränering betyder att schemaläggaren inte tilldelar nya uppgifter till noden. Schemaläggaren stänger av alla befintliga uppgifter och planerar dem på en tillgänglig nod.
Så här ändrar du läget tillgänglighet:
#Following commands can be used on swarm manager(s)
docker node update --availability drain node-1
#to verify:
docker node ls
Marknadsför eller Demote Swarm Noder
För att marknadsföra en nod eller uppsättning noder kör du docker node promote
från en managernod:
docker node promote node-3 node-2
Node node-3 promoted to a manager in the swarm.
Node node-2 promoted to a manager in the swarm.
För att nedgradera en nod eller uppsättning noder kör du docker node demote
från en hanteringsnod:
docker node demote node-3 node-2
Manager node-3 demoted in the swarm.
Manager node-2 demoted in the swarm.
Lämnar svärmen
Arbetarnod:
#Run the following on the worker node to leave the swarm.
docker swarm leave
Node left the swarm.
Om noden har Manager- rollen får du en varning om att upprätthålla beslutsfattarens kvorum. Du kan använda - tvång för att lämna på managernoden:
#Manager Node
docker swarm leave --force
Node left the swarm.
Noder som lämnade Swarm kommer fortfarande att dyka upp i docker node ls
utgång.
Så här tar du bort noder från listan:
docker node rm node-2
node-2