Dockerized Applikationen ausführen
Dockerized Applikationen ausführen
Docker Container können in Produktion für kleinere Projekte auch via container run und docker-compose up gestartet werden. Es kann auch definiert werden ob der Container im Falle eines Ausfalles neu starten soll uvw.
Docker Cluster
Docker wurde designt um auf verteilten Servern zu laufen, um mehrere Instanzen einer Anwendungen zu erzeugen und somit hochperformante Anwendungen zu erzeugen. Leider funktioniert Docker Compose nicht auf verteilten Servern.
Orchestrator
Die Orchestrierung ist das flexible Kombinieren mehrerer Services zu einer Komposition. Diese Komposition beschreibt einen ausführbaren Geschäftsprozess. Mehr dazu auf Wikipedia.
Docker stellt Docker Swarm als built-in Container Orchestrierungs-Lösung an. Eine zweite bekannte Lösung wurde von Google ins leben gerufen und nennt sich Kubernetes. Kubernetes is Open Source seit 2014 und Marktführer.
Swarm Cluster
Swarm kommt von Docker und ist bereits voll integriert. Ein Computer in einem Swarm Cluster wird Note genannt. Eine Node kann als Manager oder Worker auftreten - also Container verwalten oder einen Container ausführen. Standardmäßig ist eine Node immer beides.
Mit swarm init können wir einen Docker Swarm erstellen:
docker swarm init
als Output erhalten wir eine Info wie wir weitere Maschinen zu diesem Cluster hinzufügen können.
Note: swarm init definiert zugleich auch die Node mit der Manager Rolle.
Swarm Commands:
docker swarm..
init | Docker Swarm erstellen += Manager Node
join-token | damit können wir uns die notwendigen Token zum beitreten als Manager bzw. Worker anzeigen lassen.
docker swarm join-token manager docker swarm join-token worker
join | dem Swarm als worker oder manger beitreten - die Ausgabe von join-token ist dafür notwendig!
update | Swarm Parameter aktualisieren
leave | den Swarm verlassen
Note: Wir können Docker Compose nicht für Docker Swarm verwenden. Wir können aber Docker Stack verwenden was wiederum mit dem Docker Compose File einher geht. Dennoch gibt es unterschiede zwischen den Beiden - jeweils werten einige Dinge ignoriert. Details dazu gibt es auf der Docker Webseite.
Stack
docker stack..
deploy | mit docker stack deploy - starten wir den Stack - Docker erstellt uns das Netzwerk und vergibt Bezeichner für unsere Services. Mit deploy können wir eine Update durchführen
ls | alles Stacks im Swarm anzeigen
services | zeigt uns alle definierten Services eg. docker stack services used_deploy_name | Note: Services funktioniert nur mit Swarm!
ps | alle Tasks also Instanzen eines Services anzeigen
rm | einen Stack entfernen
Service skalieren
scale | Wir können einen Service skalieren indem wir folgendes Command mit eine Anzahl der gewünschten Kopien ausführen:
docker service scale service_name=2
Service Managen:
docker service..
create | ist ähnlich container run - hat aber mehr Möglichkeiten da es innerhalb eines Swarm Cluster ausgeführt wird
update | einen Service updaten (check --help - es gibt viele weiter Möglichkeiten)
ls | die Services eines Swarm Cluster anzeigen
ps | Tasks eines oder mehrere Services anzeigen
scale | Service skalieren
logs | logs eines oder mehrere Container anzeigen
inspect | detaillierte Informationen eines Services anzeigen
rollback | zum vorherigen Zustand(State) zurückkehren
rm | einen Service entfernen
Swarm Informationen Visuell anzeigen:
docker service create -p 8080:8080 --constraint=node.role==manager --mount=type=bind,src=/var/run/docker.sock,dst=/var/run/docker.sock dockersamples/visualizer
Node Managen
docker node..
ls | alle Swarm Knoten anzeigen
ps | laufende Tasks eines Knoten anzeigen e.g. docker node ps node_name
inspect | details über den Knoten anzeigen
promote | einen Knoten zum Manager machen
demote | einen Knoten zum Worker machen
update | einen Knoten updaten
rm | einen Knoten entfernen
Deployment Konfiguration via Docker Compose
In diesem Beispiel haben wir 2 Replicas definiert und zusätzlich haben wir einen Visualizer hinzugefügt. Der Visualizer bekommt die Rolle Manager da er dafür Designed wurde.
services: python: deploy: replicas: 2 visualizer: image: dockersamples/visualizer:stable ports: - "8080:8080" volumes: - "/var/run/docker.sock:/var/run/docker.sock" deploy: placement: constraints: [node.role == manager]