Docker Containers vs Images
Ein kostenloses Video-Tutorial von Richard Chesterwood
Software developer at VirtualPairProgrammers
7 Kurse
154.436 Teilnehmer:innen
Steige mit dem kompletten Kurs tiefer ins Thema ein
Kubernetes Hands-On - Deploy Microservices to the AWS Cloud
Use Kubernetes to deploy a Microservice architecture. You'll deploy, manage and monitor a live Kubernetes cluster.
28:31:23 On-Demand-Video • Aktualisiert am Mai 2024
Deploy containers to a Kubernetes Cluster
Run Kubernetes in AWS using either EKS or Kops
Monitor a live Kubernetes cluster using Prometheus and Grafana
Analyse system-wide logs using the ELK Stack (ElasticStack); Kibana and ElasticSearch
Handle Alerts in a Kubernetes cluster by notifying Slack Channels
Understand how Requests and Limits work in Kubernetes
Use Kubernetes Horizontal Pod Autoscaling
Configure Ingress Control on a live Kubernetes deployment
Understand Kubernetes StatefulSets
Integrate Kubernetes with a Continuous Deployment System (CD)
Use Helm to Manage Charts and to Dynamically Update your Kubernetes YAML
Deutsch [autom.]
Kursleiter: Es gibt zwei große Konzepte in Docker, und diese Konzepte sind die Container, die ich bereits erwähnt habe, und Images. Um ehrlich zu sein, habe ich in der letzten kleinen Rede, die ich gehalten habe, das Konzept von Bildern und Containern irgendwie verwechselt. Es ist wichtig, dass Sie den Unterschied zwischen den beiden verstehen, vor allem, wenn Sie etwas später mit Kubernetes arbeiten. Für mich sind die Bilder wirklich das wichtigste Konzept. Ein Bild ist eine Definition für einen Container. Man kann sich ein Image als eine Binärdatei vorstellen, die die gesamte Software und Dinge wie Umgebungsvariablen und allgemeine Einstellungen enthält, die der Container zur Ausführung benötigt. Nehmen wir an, ich bin ein Entwickler und habe den Auftrag, eine neue Website zu erstellen, und ich habe beschlossen, sie mit Tomcat, NGINX und Java zu erstellen. Sie müssen kein Java-Entwickler sein, um diesen Kurs zu besuchen. Ich benutze das nur als Arbeitsbeispiel. Es hätte Python sein können, es hätte Go sein können, es ist wirklich egal, was es ist, aber ich kann Ihnen sagen, dass wir als Java-Entwickler dazu neigen, diese Dinge namens WAR-Dateien zu erstellen, die eine ganze Website in einer einzigen Datei zusammenfassen. Wenn ich ein Entwickler wäre, der diese Website an jemanden weitergibt, der für die Bereitstellung auf einem Server verantwortlich ist, würde ich ihm wahrscheinlich die WAR-Datei geben, aber ich würde von ihm erwarten, dass er Java, Tomcat und NGINX konfiguriert, und er müsste das alles richtig machen. Der Unterschied zu einem Image besteht darin, dass ich als Entwickler alles packen kann, was benötigt wird, jede einzelne Abhängigkeit, die erforderlich ist, damit diese Anwendung läuft. Die Idee ist dann, dass ich das Image an den Verteiler weitergeben kann und dieser das Image nur noch ausführen muss. Wenn wir ein Image ausführen, ist ein Image eine ziemlich große Binärdatei, aber wenn wir dieses Image ausführen, dann rufen wir den Container auf. Das ist der Unterschied. Ein Container ist eine Instanz eines Docker-Images. Das Tolle am Docker-Ökosystem ist, dass wir diese Images nach der Erstellung veröffentlichen können, so dass sie für andere Benutzer leicht zugänglich sind. Zum Zeitpunkt der Aufzeichnung ist der beliebteste Ort, um Bilder zu veröffentlichen, diese Website hier, genannt Hub. Docker. com. Wenn Sie meinen Docker-Schulungskurs absolvieren, erstellen Sie sich ein Konto bei Docker Hub und veröffentlichen Ihre Images, aber für diesen Kurs werden wir einige Images verwenden, die bereits veröffentlicht wurden. Dies ist mein Konto bei hub. Docker. com, und Sie können hier sehen, dass ich zum Zeitpunkt der Aufzeichnung fünf verschiedene Images habe, und jeder Entwickler auf der Welt kann diese Images nehmen und sie als Container in seinen eigenen Deployments ausführen. Ich denke, eine gute Möglichkeit, Docker zu demonstrieren, besteht darin, dass Sie praktische Erfahrungen sammeln. Das erste Problem ist natürlich, dass Sie, wenn Sie neu bei Docker sind, was Sie sind, wenn Sie diesen Abschnitt lesen, wahrscheinlich Docker nicht installiert haben. Sie können dies sehr leicht überprüfen. Öffnen Sie ein Terminalfenster. Es spielt keine Rolle, ob Sie mit Windows, Linux oder Macintosh arbeiten. Geben Sie den Befehl docker ein. Es ist sehr wahrscheinlich, dass es keinen Docker-Befehl finden kann, weil Sie ihn nicht installiert haben. Nun kann es sein, dass Sie eine Antwort auf die Eingabe des Docker-Befehls erhalten. Vielleicht haben Sie es aus irgendeinem Grund in der Vergangenheit installiert. Wenn das der Fall ist, dann bleiben Sie bei diesem Video, denn ich muss Ihnen zeigen, wie Sie den Docker-Server ausführen. Das kommt in ein paar Minuten, aber wenn Sie den Befehl nicht finden können, müssen Sie ihn natürlich installieren. Ich denke, es ist fair zu sagen, dass Docker wahrscheinlich etwas einfacher zu installieren ist als Kubernetes. Sie haben sich also bereits die Mühe gemacht, Kubernetes zu installieren, also nehme ich an, dass dies für Sie relativ einfach sein wird. Sie können Docker über die URL docker abrufen. com/getdocker. Es gibt zwei Editionen. Es gibt eine Enterprise-Edition, mit der Docker versucht, eine kommerzielle Umgebung rund um Docker zu schaffen, aber es wird immer eine Community-Edition geben, die frei und quelloffen ist und dem Produktionsstandard entspricht. Glauben Sie nicht, dass es sich um eine abgespeckte Version von Docker oder etwas Ähnliches handelt. Einige Tools der Enterprise-Edition fehlen, aber an der Community-Edition gibt es nichts auszusetzen. Das haben sie erst kürzlich geändert. Sie müssen nun diesem Link folgen, um Docker aus dem Docker-Store zu beziehen. Heutzutage gibt es für alles einen Laden. Folgen Sie dem Link zum Herunterladen, und wählen Sie Ihr Betriebssystem. Wenn Sie unter Windows arbeiten, und ich werde hier dem Windows-Link folgen, ist es genau die gleiche Geschichte wie bei Kubernetes. Wenn Sie Windows 10 Professional verwenden, laden Sie Docker für Windows, Docker Community Edition für Windows, über den Link hier herunter. Wenn Sie jedoch eine frühere Version verwenden, und das tue ich, ich verwende Windows 10 Home Edition, dann müssen Sie dem Link zur Docker Toolbox folgen. Bei Macintosh ist die Situation ähnlich. Ich verwende hier nur eine Beschriftung aus meinem früheren Docker-Kurs. Wenn Sie einen Mac mit Yosemite 10. 10. 3 oder höher, dann erhalten Sie Docker für Mac, das eine native virtuelle Maschinenumgebung verwendet. Wenn Sie eine ältere Version verwenden, erhalten Sie die Docker Toolbox. Wenn Sie nun den Installationsprozess durchlaufen haben, sollte der Unterschied darin bestehen, dass Sie den Docker-Befehl eingeben - ich werde hier einen Videoschnitt machen, weil es bei mir sehr lange dauert. Es ist eindeutig hängend. Ich habe schließlich eine Antwort erhalten, aber es hat sehr lange gedauert, bis sie kam. Der Grund für die lange Pause ist, dass Docker versucht hat, eine Verbindung zum Docker-Server herzustellen. Die Idee ist, dass auf Ihrem lokalen Computer ein Daemon-Prozess im Hintergrund läuft, der die gesamte Docker-Arbeit erledigt, und Sie müssen ihn laufen lassen, um mit Docker arbeiten zu können. Ich möchte Ihnen einen der gängigsten Docker-Befehle zeigen, nämlich docker image ls. Das bedeutet: "Gib mir eine Liste aller Bilder, die ich auf diesen Computer heruntergeladen habe. Wenn Sie diesen Befehl ausführen, werden Sie feststellen, dass es eine lange Pause gibt, da er versucht, eine Verbindung zu Ihrem Docker-Server herzustellen. Ja, bei mir hat es gut eine Minute gedauert, bis ich diese Fehlermeldung beim Verbinden bekam. Können Sie sehen, dass er eindeutig versucht, eine Verbindung zu einer IP-Adresse herzustellen? Ich denke, es lohnt sich, in einer Bildunterschrift zu erläutern, was hier vor sich geht. Was hier passiert, ist, dass die Docker-Befehlszeile, hier haben Sie den Docker-Befehl eingegeben, versucht, eine Verbindung zu Docker selbst herzustellen, das Sie normalerweise als separaten Daemon-Prozess ausführen. Wenn Sie nicht mit Linux arbeiten, und ich gehe davon aus, dass die meisten von Ihnen nicht mit Linux arbeiten, gibt es hier ein Problem, denn genau wie bei Kubernetes muss dieser Docker-Daemon unter Linux laufen, da er verschiedene Funktionen des Linux-Betriebssystems zur Unterstützung von Containern nutzt. Eine kleine Abschweifung ist, dass Microsoft derzeit sehr hart daran arbeitet, eine eigene Unterstützung für Docker-Container in Windows zu entwickeln, aber zum Zeitpunkt der Aufzeichnung ist dies eine Art experimentelle Funktion, die noch nicht allgemein verwendet wird. Was passieren wird, ist - und das ist eine sehr ähnliche Geschichte wie bei Kubernetes -, dass die Docker-Befehlszeile nach einer virtuellen Maschine sucht, die standardmäßig die Oracle VirtualBox ist, die Sie vorhin gesehen haben, wenn Sie nicht auf Linux laufen. Es wird nach einem Docker-Daemon gesucht, der in dieser virtuellen Maschine läuft. Mit einem soeben installierten Docker-Tooling können Sie diese virtuelle Maschine starten und einen neuen Docker-Daemon starten. Das ist absolut in Ordnung, aber da Sie einen Kubernetes-Kurs besuchen, habe ich einen Plan. Im vorangegangenen Abschnitt haben Sie sich natürlich die Mühe gemacht, Minikube zu installieren, bei dem es sich bekanntlich um eine abgespeckte Version von Kubernetes handelt. Was ich Ihnen noch nicht gesagt habe, ist, dass sich in Minikube eine Installation von Docker befindet. Ein Docker-Daemon läuft einwandfrei. Was wir tun können, und das ist nur ein kleiner Trick, den ich oft verwende, ist, dass wir, wenn wir bereits Minikube laufen lassen, der Docker-Befehlszeile sagen können, dass sie die Minikube-Version von Docker verwenden soll, um unsere Arbeit zu erledigen. Das ist ein netter kleiner Trick. Schalten wir auf das Terminal um, und ich zeige Ihnen, wie es funktioniert. Ich hoffe, Sie haben es geschafft, Minikube im vorherigen Abschnitt zu installieren. Ich weiß nicht, ob es bei Ihnen im Moment läuft. Wenn Sie Minikube noch nicht benutzen, dann starten Sie es mit minikube start. Wenn Sie mit Windows 10 Professional arbeiten, benötigen Sie diese zusätzlichen Befehlszeilenargumente. Einzelheiten dazu finden Sie im vorherigen Abschnitt. Wie immer dauert es ziemlich lange, bis es losgeht, also lassen Sie uns hier einen Videoschnitt machen. Großartig, jetzt sollte Minikube funktionieren. Denken Sie daran, dass sich in diesem Minikube eine Docker-Umgebung befindet. Um Sie daran zu erinnern: Wenn wir jetzt ein Docker-Image ls ausführen, werden Sie wahrscheinlich immer noch einen Fehler sehen. Das liegt daran, dass wir Docker konfigurieren müssen, um ihm mitzuteilen, dass wir mit der Minikube-Umgebung sprechen und nicht mit dem herkömmlichen Docker, das wir in seiner eigenen virtuellen Maschine ausführen. Hier können wir den Befehl minikube gefolgt von docker-env verwenden, der uns sagt, welche Umgebungsvariablen wir einrichten müssen, damit unsere Docker-Befehlszeile mit Docker in Minikube kommunizieren kann. Wenn Sie auf einem Mac, Linux oder Windows mit Cygwin arbeiten, können Sie diese Exportbefehle kopieren und einfügen, oder noch besser, Sie kopieren einfach dieses Eval hier. Das einzige, was es tun wird, ist, die minikube docker-env auszuführen und diese Ausgabe zu nehmen und dann die Ausgabe auszuführen. Es wird diese vier Exporte durchführen. Versuchen wir das mal. Ich werde kopieren und einfügen. Wenn ich zum Beispiel ein echo $DOCKER_HOST ausführe, können Sie sehen, dass der Wert hier mit dem Wert hier übereinstimmt. Nur für den Fall, dass Sie in der Standard-Windows-Eingabeaufforderung arbeiten, was ich ehrlich gesagt nicht empfehle, wäre es besser, wenn Sie etwas wie Cygwin verwenden würden, aber wenn Sie sich entschieden haben, die Standard-Windows-Eingabeaufforderung zu verwenden, könnten Sie sich Sorgen machen, dass all das Unix-Zeug, das wir gerade gesehen haben, für Sie nicht funktioniert. Nun, ich habe gerade meine Eingabeaufforderung für eine Demonstration umgestellt. Ich muss zugeben, dass ich das noch nie ausprobiert habe. Ich war von den Ergebnissen überrascht. Sie können sehen, dass sie tatsächlich daran gedacht haben, und wenn Sie auf der Eingabeaufforderung laufen, dann wird es Standard-DOS-Befehlsaufforderungen ausgeben, ich nehme an, das tun sie. Diese werden als Befehle eingestellt. Wie Sie sehen, gibt es hier eine abschließende REM-Anweisung, die darauf hindeutet, dass wir das hier einfach kopieren können, und wenn wir das ausführen, erhalten wir genau die gleichen Ergebnisse wie drüben in Cygwin. Ich möchte Sie nur daran erinnern, dass Sie nicht alles miteinander kombinieren sollten. Verwenden Sie nicht manchmal die Windows-Befehlszeile und manchmal Cygwin. Wählen Sie das eine oder das andere. Andernfalls entsteht ein schreckliches Durcheinander. Ich wollte das nur tun, um Ihnen zu zeigen, dass Sie, wenn Sie die Windows-Eingabeaufforderung verwenden, nicht ausgeschlossen sind. Wir haben nun diese Umgebungsvariablen eingerichtet, und das Wichtigste ist nun, dass Sie den Befehl docker image ls eingeben können, und was wir hier sehen, ist eine Liste aller Docker-Images, die in der virtuellen Minikube-Maschine enthalten sind. Nun, diese Bilder haben nichts mit uns zu tun. Wir haben sie nie heruntergeladen. Es handelt sich dabei um die Docker-Images, die Minikube benötigt, um eine Kubernetes-Umgebung einzurichten. Wir werden uns einige dieser Bilder später im Kurs ansehen, aber für den Moment betrachten Sie sie einfach als interne Bilder, die Minikube benötigt. Das ist ein kleiner Trick, den Sie anwenden können. Wir verwenden den Docker-Prozess innerhalb von Minikube effektiv wieder. Das Schöne an der Wiederverwendung des Docker-Prozesses innerhalb von Minikube, anstatt den Docker-Daemon erneut zu starten, ist, dass es die Ressourcen Ihres Computers effizienter nutzt. Ich arbeite oft mit einem Laptop, der nicht sehr leistungsfähig ist. Der Arbeitsspeicher ist nicht sehr groß, und wenn ich Minikube und Docker Toolbox gleichzeitig ausführe, dann sind das zwei virtuelle Maschinen, die mein Laptop verwalten muss, und er hat wirklich zu kämpfen. Das ist ein netter Trick, den ich ziemlich oft anwende.