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

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

Initiera en svärm

docker swarm init [OPTIONS]

Gå med i en svärm som nod och / eller chef

docker swarm join [OPTIONS] HOST:PORT

Skapa en ny tjänst

docker service create [OPTIONS] IMAGE [COMMAND] [ARG...]

Visa detaljerad information om en eller flera tjänster

docker service inspect [OPTIONS] SERVICE [SERVICE...]

Lista tjänster

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...]

Uppdatera en tjänst

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


Modified text is an extract of the original Stack Overflow Documentation
Licensierat under CC BY-SA 3.0
Inte anslutet till Stack Overflow