Docker
Docker-zwermmodus
Zoeken…
Invoering
Een zwerm is een aantal Docker Engines (of nodes ) die diensten gezamenlijk inzetten. Zwerm wordt gebruikt om de verwerking te verspreiden over vele fysieke, virtuele of cloud-machines.
Syntaxis
Initialiseer een zwerm : docker zwerm init [OPTIES]
Word lid van een zwerm als knooppunt en / of manager : docker zwerm sluit zich aan [OPTIONS] HOST: PORT
Maak een nieuwe service : docker-service create [OPTIONS] IMAGE [COMMAND] [ARG ...]
Gedetailleerde informatie weergeven over een of meer services : Docker-service inspecteren [OPTIES] SERVICE [SERVICE ...]
Lijst services : havenarbeider dienst ls [OPTIONS]
Een of meer services verwijderen : docker-service rm SERVICE [SERVICE ...]
Een of meerdere gerepliceerde services schalen: docker-serviceschaal SERVICE = REPLICAS [SERVICE = REPLICAS ...]
Lijst de taken van een of meer services : docker service ps [OPTIES] SERVICE [SERVICE ...]
Update een service : docker service update [OPTIONS] SERVICE
Opmerkingen
Zwermmodus implementeert de volgende functies:
- Clusterbeheer geïntegreerd met Docker Engine
- Gedecentraliseerd ontwerp
- Declaratief servicemodel
- scaling
- Gewenste staatsverzoening
- Multi-host netwerken
- Service ontdekking
- Load balancing
- Standaard beveiligd ontwerp
- Rolling updates
Ga voor meer officiële Docker-documentatie over Swarm naar: Overzicht zwermmodus
Zwermmodus CLI-opdrachten
Klik op opdrachtenbeschrijving voor documentatie
docker swarm init [OPTIONS]
Word lid van een zwerm als een knooppunt en / of manager
docker swarm join [OPTIONS] HOST:PORT
docker service create [OPTIONS] IMAGE [COMMAND] [ARG...]
Toon gedetailleerde informatie over een of meer services
docker service inspect [OPTIONS] SERVICE [SERVICE...]
docker service ls [OPTIONS]
Verwijder een of meer services
docker service rm SERVICE [SERVICE...]
Schaal een of meerdere gerepliceerde services
docker service scale SERVICE=REPLICAS [SERVICE=REPLICAS...]
Lijst de taken van een of meer services
docker service ps [OPTIONS] SERVICE [SERVICE...]
docker service update [OPTIONS] SERVICE
Maak een zwerm op Linux met behulp van docker-machine en 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
Ontdek werknemer en manager join token
Wanneer u de levering van nieuwe knooppunten aan een zwerm automatiseert, moet u weten wat het juiste join-token is voor de zwerm en het geadverteerde adres van de manager. U kunt dit vinden door de volgende opdrachten uit te voeren op elk van de bestaande beheerknooppunten:
# 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)
De optie -q voert alleen het token uit. Zonder deze optie krijgt u de volledige opdracht voor het registreren bij een zwerm.
Vervolgens kun je op nieuw ingerichte knooppunten met de zwerm meedoen via.
docker swarm join --token $WORKER_TOKEN $MANAGER_ADDRESS
Hallo wereld applicatie
Gewoonlijk wilt u een stapel services maken om een gerepliceerde en georkestreerde toepassing te vormen.
Een typische moderne webapplicatie bestaat uit een database, api, frontend en reverse proxy.
volharding
Database heeft persistentie nodig, dus we hebben een bestandssysteem nodig dat wordt gedeeld over alle knooppunten in een zwerm. Het kan NAS, NFS-server, GFS2 of iets anders zijn. Het instellen valt hier buiten het bereik. Momenteel bevat Docker geen volharding in een zwerm en beheert deze niet. In dit voorbeeld wordt ervan uitgegaan dat er /nfs/
shared location is gemonteerd op alle knooppunten.
Netwerk
Om met elkaar te kunnen communiceren, moeten services in een zwerm zich op hetzelfde netwerk bevinden.
Kies een IP-bereik (hier 10.0.9.0/24
) en netwerknaam ( hello-network
) en voer een opdracht uit:
docker network create \
--driver overlay \
--subnet 10.0.9.0/24 \
--opt encrypted \
hello-network
Database
De eerste service die we nodig hebben is een database. Laten we postgresql als voorbeeld gebruiken. Maak een map voor een database in nfs/postgres
en voer dit uit:
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
Merk op dat we --network hello-network
en --mount
opties hebben gebruikt.
API
Het maken van API valt buiten het bereik van dit voorbeeld, dus laten we doen alsof u een API-afbeelding hebt onder 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
Merk op dat we een naam van onze database-service hebben doorgegeven. Docker-zwerm heeft een ingesloten round-robin DNS-server, zodat API verbinding kan maken met de database met behulp van de DNS-naam.
Omgekeerde proxy
Laten we de nginx-service maken om onze API aan een buitenwereld te bieden. Maak nginx-configuratiebestanden op een gedeelde locatie en voer dit uit:
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
Merk op dat we de optie -p
hebben gebruikt om een poort te publiceren. Deze poort zou beschikbaar zijn voor elk knooppunt in een zwerm.
Knooppunt Beschikbaarheid
Beschikbaarheid zwermmodus:
- Actief betekent dat de planner taken kan toewijzen aan een knooppunt.
- Pauze betekent dat de planner geen nieuwe taken aan het knooppunt toewijst, maar bestaande taken actief blijven.
- Drain betekent dat de planner geen nieuwe taken aan het knooppunt toewijst. De planner sluit alle bestaande taken af en plant deze op een beschikbaar knooppunt.
Om de beschikbaarheid van de modus te wijzigen:
#Following commands can be used on swarm manager(s)
docker node update --availability drain node-1
#to verify:
docker node ls
Zwermknooppunten promoten of degraderen
Om een knooppunt of een reeks knooppunten te promoten, voert u docker node promote
uit vanaf een managerknooppunt:
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.
Als u een knooppunt of een reeks knooppunten wilt degraderen, voert u docker node demote
uit vanaf een beheerknooppunt:
docker node demote node-3 node-2
Manager node-3 demoted in the swarm.
Manager node-2 demoted in the swarm.
De zwerm verlaten
Werknemersknooppunt:
#Run the following on the worker node to leave the swarm.
docker swarm leave
Node left the swarm.
Als het knooppunt de rol Manager heeft, krijgt u een waarschuwing over het handhaven van het quorum van managers. Je kunt --force gebruiken om op het managerknooppunt te vertrekken:
#Manager Node
docker swarm leave --force
Node left the swarm.
Knopen die de zwerm hebben verlaten, worden nog steeds weergegeven in de uitvoer van docker node ls
.
Knopen uit de lijst verwijderen:
docker node rm node-2
node-2