Docker
Modalità sciame Docker
Ricerca…
introduzione
Uno sciame è un numero di Docker Engines (o nodi ) che distribuiscono servizi collettivamente. Swarm viene utilizzato per distribuire l'elaborazione su molte macchine fisiche, virtuali o cloud.
Sintassi
Inizializzazione di uno sciame : finestra mobile sciame init [OPZIONI]
Unisciti a uno sciame come nodo e / o gestore : join sciame docker [OPZIONI] HOST: PORT
Creare un nuovo servizio : creazione di una finestra mobile [OPZIONI] IMMAGINE [COMANDO] [ARG ...]
Visualizza informazioni dettagliate su uno o più servizi : ispezioni servizio docker [OPZIONI] SERVIZIO [SERVIZIO ...]
Elenco servizi : servizio docker ls [OPZIONI]
Rimuovere uno o più servizi : servizio docker rm SERVICE [SERVICE ...]
Scalare uno o più servizi replicati : scala del servizio finestra mobile SERVICE = REPLICAS [SERVICE = REPLICAS ...]
Elencare le attività di uno o più servizi : docker service ps [OPZIONI] SERVICE [SERVICE ...]
Aggiornamento di un servizio : aggiornamento del servizio finestra mobile [OPZIONI] SERVIZIO
Osservazioni
La modalità Sciame implementa le seguenti funzionalità:
- Gestione dei cluster integrata con Docker Engine
- Design decentralizzato
- Modello di servizio dichiarativo
- scalata
- Riconciliazione di stato desiderata
- Rete multi-host
- Scoperta del servizio
- Bilancio del carico
- Design sicuro per impostazione predefinita
- Aggiornamenti a rotazione
Per ulteriori informazioni sulla documentazione ufficiale di Docker in merito alla visita di Swarm : panoramica sulla modalità Swarm
Comandi CLI della modalità scia
Fare clic sulla descrizione dei comandi per la documentazione
docker swarm init [OPTIONS]
Unisciti a uno sciame come nodo e / o manager
docker swarm join [OPTIONS] HOST:PORT
docker service create [OPTIONS] IMAGE [COMMAND] [ARG...]
Visualizza informazioni dettagliate su uno o più servizi
docker service inspect [OPTIONS] SERVICE [SERVICE...]
docker service ls [OPTIONS]
docker service rm SERVICE [SERVICE...]
Scala uno o più servizi replicati
docker service scale SERVICE=REPLICAS [SERVICE=REPLICAS...]
Elencare le attività di uno o più servizi
docker service ps [OPTIONS] SERVICE [SERVICE...]
docker service update [OPTIONS] SERVICE
Crea uno sciame su Linux usando docker-machine e 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
Scopri i token di join di worker e manager
Quando si automatizza il provisioning di nuovi nodi su uno sciame, è necessario sapere qual è il giusto token di join sia per lo sciame che per l'indirizzo pubblicizzato del gestore. Puoi scoprirlo eseguendo i seguenti comandi su uno dei nodi del gestore esistente:
# 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)
L'opzione -q emette solo il token. Senza questa opzione si ottiene il comando completo per la registrazione a uno sciame.
Quindi su nodi appena sottoposti a provisioning, puoi unirti allo sciame usando.
docker swarm join --token $WORKER_TOKEN $MANAGER_ADDRESS
Ciao domanda mondiale
Di solito vorresti creare una serie di servizi per formare un'applicazione replicata e orchestrata.
Una tipica applicazione Web moderna è costituita da un database, api, frontend e reverse proxy.
Persistenza
Il database ha bisogno di persistenza, quindi abbiamo bisogno di un filesystem condiviso su tutti i nodi di uno sciame. Può essere NAS, server NFS, GFS2 o qualsiasi altra cosa. L'impostazione è fuori portata qui. Attualmente Docker non contiene e non gestisce la persistenza in uno sciame. Questo esempio presuppone che ci sia /nfs/
posizione condivisa montata su tutti i nodi.
Rete
Per essere in grado di comunicare tra loro, i servizi in uno sciame devono essere sulla stessa rete.
Scegli un intervallo IP (qui 10.0.9.0/24
) e il nome della rete ( hello-network
) ed esegui un comando:
docker network create \
--driver overlay \
--subnet 10.0.9.0/24 \
--opt encrypted \
hello-network
Banca dati
Il primo servizio di cui abbiamo bisogno è un database. Usiamo postgresql come esempio. Crea una cartella per un database in nfs/postgres
ed esegui questo:
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
Nota che abbiamo usato le --network hello-network
e --mount
.
API
La creazione dell'API non rientra nell'ambito di questo esempio, quindi facciamo finta di avere un'immagine API sotto 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
Si noti che abbiamo passato un nome al nostro servizio di database. Docker swarm ha un server DNS round robin incorporato, quindi l'API sarà in grado di connettersi al database usando il suo nome DNS.
Reverse proxy
Creiamo il servizio nginx per servire la nostra API in un mondo esterno. Creare i file di configurazione di nginx in un percorso condiviso ed eseguire questo:
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
Si noti che abbiamo usato l'opzione -p
per pubblicare una porta. Questa porta sarebbe disponibile per qualsiasi nodo in uno sciame.
Nodo Disponibilità
Disponibilità del nodo modalità sciame:
- Attivo significa che lo schedulatore può assegnare compiti a un nodo.
- Pausa indica che lo scheduler non assegna nuove attività al nodo, ma le attività esistenti rimangono in esecuzione.
- Scarico indica che lo scheduler non assegna nuove attività al nodo. Lo scheduler chiude tutte le attività esistenti e le pianifica su un nodo disponibile.
Per cambiare la disponibilità della modalità:
#Following commands can be used on swarm manager(s)
docker node update --availability drain node-1
#to verify:
docker node ls
Promuovi o abbassa i nodi dello sciame
Per promuovere un nodo o un insieme di nodi, eseguire il docker node promote
da un nodo gestore:
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.
Per abbassare di livello un nodo o un set di nodi, eseguire il docker node demote
da un nodo gestore:
docker node demote node-3 node-2
Manager node-3 demoted in the swarm.
Manager node-2 demoted in the swarm.
Lasciando lo Sciame
Nodo lavoratore:
#Run the following on the worker node to leave the swarm.
docker swarm leave
Node left the swarm.
Se il nodo ha il ruolo Manager , riceverai un avviso sul mantenimento del quorum dei Manager. Puoi usare --force per lasciare sul nodo manager:
#Manager Node
docker swarm leave --force
Node left the swarm.
I nodi che hanno lasciato lo Swarm verranno comunque visualizzati nell'output del docker node ls
.
Per rimuovere i nodi dall'elenco:
docker node rm node-2
node-2