Arbeiten mit Docker-Containern

Einführung

Docker ist ein beliebtes Containerisierungstool, das verwendet wird, um Softwareanwendungen mit einem Dateisystem bereitzustellen, das alles enthält, was sie zum Ausführen benötigen. Die Verwendung von Docker-Containern gewährleistet, dass die Software unabhängig von ihrem Bereitstellungsort gleich funktioniert, da ihre Laufzeitumgebung konsequent ist.

In diesem Tutorial geben wir einen kurzen Überblick über die Beziehung zwischen Docker-Images und Docker-Containern. Anschließend werden wir uns genauer damit befassen, wie man Container ausführt, startet, stoppt und entfernt.

Überblick

Wir können uns ein Docker-Image als eine inerte Vorlage vorstellen, die verwendet wird, um Docker-Container zu erstellen. Bilder beginnen typischerweise mit einem Wurzeldateisystem und fügen Dateisystemänderungen und ihre entsprechenden Ausführungsparameter in geordneten, schreibgeschützten Schichten hinzu. Anders als bei einer typischen Linux-Distribution enthält ein Docker-Image normalerweise nur die absolut notwendigen Bestandteile für das Ausführen der Anwendung. Die Images haben keinen Zustand und ändern sich nicht. Vielmehr bilden sie den Ausgangspunkt für Docker-Container.

Bilder werden mit dem docker run-Befehl zum Leben erweckt, der einen Container erstellt, indem er eine Lese-Schreib-Ebene oben auf das Bild legt. Diese Kombination aus schreibgeschützten Ebenen, die mit einer Lese-Schreib-Ebene überlagert sind, wird als Union-Dateisystem bezeichnet. Wenn eine Änderung an einer vorhandenen Datei in einem laufenden Container vorgenommen wird, wird die Datei aus dem schreibgeschützten Bereich in die Lese-Schreib-Ebene kopiert, wo die Änderungen angewendet werden. Die Version in der Lese-Schreib-Ebene verbirgt die Originaldatei, entfernt sie aber nicht. Änderungen in der Lese-Schreib-Ebene existieren nur innerhalb einer einzelnen Containerinstanz. Wenn ein Container gelöscht wird, gehen alle Änderungen verloren, es sei denn, es werden Maßnahmen ergriffen, um sie zu erhalten.

So arbeiten Sie mit Docker-Containern

  1. Erstellen Sie zwei Docker-Container
  2. Starten Sie den ersten Container neu
  3. Löschen Sie beide Container

Arbeiten mit Containern

Jedes Mal, wenn Sie den Befehl docker run verwenden, wird ein neuer Container aus dem angegebenen Image erstellt. Dies kann zu Verwirrung führen, daher werfen wir einen Blick auf einige Beispiele:

Schritt 1: Erstellen von zwei Containern

Der folgende docker run-Befehl erstellt einen neuen Container unter Verwendung des Basisimages ubuntu. -t gibt uns ein Terminal, und -i ermöglicht es uns, damit zu interagieren. Wir verlassen uns auf den Standardbefehl in der Docker-Datei des Ubuntu-Basisimages, bash, um uns in eine Shell zu bringen.

  1. docker run -ti ubuntu

Die Befehlszeilen-Prompt ändert sich, um anzuzeigen, dass wir uns im Container als Root-Benutzer befinden, gefolgt von der 12-stelligen Container-ID.

Wir werden eine Änderung vornehmen, indem wir einige Texte in das /tmp-Verzeichnis des Containers echoen und dann cat verwenden, um zu überprüfen, ob sie erfolgreich gespeichert wurden.

  1. echo "Example1" > /tmp/Example1.txt
  2. cat /tmp/Example1.txt
Output
Example1

Jetzt verlassen wir den Container.

  1. exit

Docker-Container stoppen, sobald der ausgegebene Befehl abgeschlossen ist, daher wurde unser Container gestoppt, als wir die Bash-Shell verließen. Wenn wir docker ps ausführen, den Befehl zum Anzeigen laufender Container, sehen wir unseren nicht.

  1. docker ps
Output
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES

Wenn wir die -a-Flag hinzufügen, die alle Container anzeigt, gestoppt oder laufend, wird unser Container in der Liste angezeigt:

  1. docker ps -a
Output
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 11cc47339ee1 ubuntu "/bin/bash" 6 minutes ago Exited (127) 8 seconds ago small_sinoussi

Beim Erstellen des Containers wurde ihm seine Container-ID und ein zufällig generierter Name zugewiesen. In diesem Fall ist 11cc47339ee1 die Container-ID und small_sinoussi ist der zufällig generierte Name. ps -a zeigt diese Werte sowie das Image, aus dem der Container erstellt wurde (ubuntu), wann der Container erstellt wurde (vor sechs Minuten) und den Befehl, der darin ausgeführt wurde (/bin/bash). Die Ausgabe gibt auch den Status des Containers an (Beendet) und wie lange der Container sich schon in diesem Zustand befindet (vor 6 Sekunden). Wenn der Container noch laufen würde, würden wir den Status „Up“ sehen, gefolgt von der Laufzeit des Containers.

Wenn wir denselben Befehl erneut ausführen, wird ein völlig neuer Container erstellt:

  1. docker run -ti ubuntu

Wir können erkennen, dass es sich um einen neuen Container handelt, weil die ID in der Befehlszeile anders ist, und wenn wir nach unserer Beispiel1-Datei suchen, werden wir sie nicht finden:

  1. cat /tmp/Example1
Output
cat: /tmp/Example1: No such file or directory

Dies kann den Eindruck erwecken, dass die Daten verschwunden sind, aber das ist nicht der Fall. Wir werden den zweiten Container jetzt beenden, um zu sehen, dass er und unser erster Container mit der erstellten Datei beide auf dem System vorhanden sind.

  1. exit

Wenn wir die Container erneut auflisten, erscheinen beide:

  1. docker ps -a
Output
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 6e4341887b69 ubuntu "/bin/bash" About a minute ago Exited (1) 6 seconds ago kickass_borg 11cc47339ee1 ubuntu "/bin/bash" 13 minutes ago Exited (127) 6 minutes ago small_sinoussi

Schritt 2: Neustart des ersten Containers

Um einen vorhandenen Container neu zu starten, verwenden wir das start-Befehl mit dem -a-Flag, um sich daran anzuhängen, und das -i-Flag, um es interaktiv zu machen, gefolgt entweder von der Container-ID oder dem Namen. Stellen Sie sicher, dass Sie die ID Ihres Containers im folgenden Befehl ersetzen:

  1. docker start -ai 11cc47339ee1

Wir befinden uns erneut am Bash-Prompt des Containers und wenn wir die Datei, die wir zuvor erstellt haben, mit cat anzeigen, ist sie immer noch vorhanden.

  1. cat /tmp/Example1.txt
Output
Example1

Wir können den Container jetzt verlassen:

  1. exit

Dieser Ausgabebefehl zeigt, dass Änderungen, die im Container vorgenommen wurden, durch Anhalten und Neustarten bestehen bleiben. Die Inhalte werden erst gelöscht, wenn der Container entfernt wird. Dieses Beispiel zeigt auch, dass die Änderungen auf den einzelnen Container beschränkt waren. Als wir einen zweiten Container starteten, spiegelte er den ursprünglichen Zustand des Images wider.

Schritt 3: Löschen beider Container

Wir haben zwei Container erstellt, und wir werden unser kurzes Tutorial abschließen, indem wir sie löschen. Der Befehl docker rm, der nur für angehaltene Container funktioniert, ermöglicht es Ihnen, den Namen oder die ID eines oder mehrerer Container anzugeben, sodass wir beide mit folgendem Befehl löschen können:

  1. docker rm 11cc47339ee1 kickass_borg
Output
11cc47339ee1 kickass_borg

Beide Container und alle Änderungen, die wir darin vorgenommen haben, sind jetzt verschwunden.

Fazit

Wir haben uns ausführlich mit dem Befehl docker run beschäftigt, um zu sehen, wie er jedes Mal automatisch einen neuen Container erstellt, wenn er ausgeführt wird. Wir haben auch gesehen, wie man einen gestoppten Container findet, startet und sich mit ihm verbindet. Wenn Sie mehr über das Verwalten von Containern erfahren möchten, könnte Sie der Leitfaden Namen von Docker-Containern: 3 Tipps für Anfänger interessieren.

Source:
https://www.digitalocean.com/community/tutorials/working-with-docker-containers