Docker bietet normalerweise die erste Einführung eines Entwicklers in Container. Kubernetes ist eine Orchestrierungsplattform, die Herausforderungen beim Ausführen von Containern in der Produktion löst. So werden Docker-Befehle ihren Kubernetes-Gegenstücken zugeordnet.
Sie können den docker
nicht verwenden CLI zur Interaktion mit Containern, die in Kubernetes ausgeführt werden. Kubernetes bietet eine eigene Befehlszeilenschnittstelle, kubectl
, um Ihnen bei der Verwaltung Ihres Clusters zu helfen. Lesen Sie unseren Leitfaden für die ersten Schritte mit kubectl
wenn Sie mit dem Tool nicht vertraut sind.
Nichts vom docker
Befehle haben denselben Namen in kubectl
. Kubernetes stellt Funktionalität auf seine eigene Weise bereit. Workloads selbst unterscheiden sich grundlegend – Docker ist darauf ausgelegt, mit jeweils einem einzelnen Container zu arbeiten, während Kubernetes die Orchestrierung mehrerer Replikate ermöglicht.
Der erste zu würdigende Punkt ist die Verschiebung der Terminologie. Docker bezieht sich auf „Container“, während Kubernetes „Pods“ verwendet. Ein Pod kann einen Container oder mehrere Replikate ausführen, die als einzelne Einheit verwaltet werden. Abgesehen von diesem Detail sollten Sie, wenn Sie in Docker „Container“ sehen, an einen Kubernetes-„Pod“ denken. Die Begriffe werden für den Rest dieses Artikels austauschbar verwendet.
Details zu Ihren Containern abrufen
In Docker verwenden Sie docker ps -a
, um alle Container auf Ihrem Computer anzuzeigen.
Das nächste Kubernetes-Äquivalent ist kubectl get pods
.
Die Ausgabe der beiden Befehle ist ziemlich unterschiedlich. Docker zeigt weitere Informationen über die Arbeitslast, die der Container ausführt.
Kubernetes stellt Details zu Bild und Befehl bereit, wenn der describe pod
verwendet wird Befehl. Sie müssen den Namen des Pods übergeben. Dies gibt viel ausführlichere Informationen, indem eine Liste anstelle einer Tabelle verwendet wird.
Befehle in Containern ausführen
Mit Docker können Sie einen Befehl in einem laufenden Container mit docker exec
ausführen .
Das Kubernetes-Äquivalent heißt auch exec
. Verwenden Sie den Kubernetes-Pod-Namen anstelle des Docker-Containernamens. Der Befehl wird etwas anders angegeben – er muss vom Pod-Namen durch ein --
getrennt werden Reihenfolge.
Sie können das -it
verwenden Flags, um interaktiven Zugriff auf die gleiche Weise wie Docker zu erhalten. Dies ist eine Abkürzung für --stdin --tty
und sollte verwendet werden, wenn Sie eine Shell innerhalb eines Pods starten möchten. Geben Sie den Shell-Namen an, z. B. bash
, als Befehl.
Kubectl unterstützt das attach
Befehl, wenn Sie an einen Prozess in einem Container anhängen möchten, der bereits ausgeführt wird. Es funktioniert ähnlich wie docker attach
aber Sie sollten das -it
übergeben Flags, wenn Sie interaktiven Zugriff benötigen.
Anzeigen von Containerprotokollen
Um die Protokolle eines Containers mit Docker anzuzeigen, verwenden Sie die docker logs
Befehl. Hinzufügen des -f
switch „folgt“ den Protokollen, sodass sie kontinuierlich auf Ihr Terminal gestreamt werden.
logs
von Kubectl Befehl hat die gleiche Syntax. Geben Sie einen Pod-Namen auf die gleiche Weise an, wie Docker einen Containernamen akzeptiert.
Sowohl Docker als auch Kubernetes sammeln Protokolle aus der Standardausgabe und dem Standardfehler (stdout
/stderr
) Streams laufender Container. Kubernetes verarbeitet Container-Neustarts anders als Docker. Während in Docker ein neu gestarteter Container seine Logs an die bestehenden anhängt, erstellt Kubernetes für jeden Lauf ein neues Log. Sie können die Protokolle eines ersetzten Containers abrufen, indem Sie --previous
hinzufügen -Flag in die logs
Befehl.
Container erstellen
Docker-Container werden mit dem run
erstellt Befehl. So könnten Sie ein nginx
starten Server mit Docker:
docker run -d --name nginx --restart=always -p 80:80 nginx
Dadurch wird ein Container mit nginx
erstellt Basisimage und stellt es so ein, dass es automatisch neu gestartet wird. Der Server ist an den Standard-HTTP-Port 80 gebunden.
Kubernetes erfordert, dass Sie beim Hinzufügen von Containern zu Ihrem Cluster an Abstraktionen auf höherer Ebene denken. Anstatt einen Container auszuführen, erstellen Sie eine Bereitstellung um Ihre Arbeitsbelastung darzustellen:
kubectl create deployment --image=nginx nginx
Dadurch wird ein nginx
erstellt Einsatz. Ein Pod wird automatisch gestartet; Innerhalb des Pods gibt es einen Container, der den Webserver ausführt.
Das Erstellen einer Bereitstellung bindet ihre Container nicht an Ports. Der neu erstellte Server ist noch nicht erreichbar. Ports müssen offen gelegt werden über einen Dienst . Pods sind flüchtig und können mehrere replizierte Container enthalten. Dienste definieren eine logische Sammlung von Pods und lassen Sie ihnen Netzwerkressourcen wie IP-Adresse und Port zuweisen.
Verfügbarmachen von nginx
Die Bereitstellung auf Port 80 ermöglicht den Zugriff auf den Server:
kubectl expose deployment nginx --port=80 --name nginx-http
Der Versuch, auf Port 80 der Standard-IP-Adresse des Clusters zuzugreifen, sollte Sie jetzt zu nginx
leiten Server.
Kubectl unterstützt andere docker run
nicht direkt Optionen wie Volume-Erstellung und Bind-Mounts. Container, die dauerhaften Speicher erfordern, müssen Volumes manuell über kubectl
konfigurieren Befehle oder ein Volume-Manifest.
Container entfernen
Docker-Container werden mit docker rm
entfernt Befehl mit der ID des Containers.
Kubernetes lässt Sie Container nicht direkt löschen. Stattdessen arbeiten Sie mit der Bereitstellung die den Pod erstellt hat. Verwenden Sie die kubectl delete deployment
Befehl, wobei der Name der Bereitstellung übergeben wird.
Docker ermöglicht es Ihnen, anzuhalten einen Behälter, anstatt ihn zu entfernen. Kubernetes hat die Unterstützung für diese Aktion entfernt. Die empfohlene Methode zum vorübergehenden Anhalten einer Bereitstellung besteht darin, die Anzahl der Replikate auf 0 herunterzuskalieren. Wenn keine Pods ausgeführt werden, wird die Arbeitslast effektiv gestoppt.
kubectl scale --replicas=0 deployment/my-deployment
Wenn Sie bereit sind, die Bereitstellung fortzusetzen, führen Sie scale
aus erneut befehlen. Legen Sie die Anzahl der neuen Replikate auf 1
fest oder höher. Die Verwendung von mehr Replikaten kann die Verfügbarkeit Ihres Workloads erhöhen.
Schlussfolgerung
Es gibt keine direkten Parallelen zwischen der Docker-CLI und kubectl
. Die meisten Kubernetes-Befehle haben eine andere Syntax als ihre Docker-Pendants. Sie müssen sich mit neuen Begriffen und Optionen vertraut machen, bevor Sie Docker-basierte Workflows auf Kubernetes umstellen können.
In vielen Fällen gibt es kein kubectl
Alternative zu einer Docker-CLI-Funktion. Die Funktionalität von Docker konzentriert sich auf das Container-Konzept. Kubernetes nimmt das und stellt es in den Mittelpunkt eines stark erweiterten Ressourcen-Ökosystems.
Container werden selten isoliert behandelt. Stattdessen müssen Sie mit Ressourcen wie Bereitstellungen, Diensten und Replikatsätzen arbeiten. Aus diesem Grund kann das Erlernen von Kubernetes aus der Perspektive eines Docker-Benutzers herausfordernd erscheinen.
Wenn Sie mit den Docker-Grundlagen vertraut sind, sollte der Übergang zu Kubernetes dennoch relativ einfach sein. Der Hauptunterschied besteht darin, dass auf das, was Docker als Container ansieht, in Kubernetes normalerweise als aggregierter „Pod“ zugegriffen wird. Pods werden durch „Bereitstellungen“ erstellt, die die Workloads in Ihrem Cluster darstellen. Im Zweifelsfall siehe kubectl
docs, um eine passende Übereinstimmung für einen Docker-Befehl zu finden.