Arbeiten mit Docker Containern

Einführung

Docker ist ein beliebtes Containerisierungstool, mit dem Softwareanwendungen ein Dateisystem erhalten, das alles enthält, was sie zum Ausführen benötigen. Durch die Verwendung von Docker-Containern wird sichergestellt, dass sich die Software unabhängig von ihrem Bereitstellungsort auf die gleiche Weise verhält, da ihre Laufzeitumgebung unbarmherzig konsistent ist.

In diesem Tutorial geben wir einen kurzen Überblick über die Beziehung zwischen Docker-Images und Docker-Containern. Anschließend wird detaillierter beschrieben, wie Container ausgeführt, gestartet, gestoppt und entfernt werden.

Überblick

Wir können uns ein * Docker-Image * als eine inerte Vorlage vorstellen, die zum Erstellen von Docker-Containern verwendet wird. Images beginnen normalerweise mit einem Root-Dateisystem und fügen Dateisystemänderungen und die entsprechenden Ausführungsparameter in geordneten schreibgeschützten Ebenen hinzu. Im Gegensatz zu einer typischen Linux-Distribution enthält ein Docker-Image normalerweise nur das Nötigste, um die Anwendung auszuführen. Die Bilder haben keinen Status und sie ändern sich nicht. Sie bilden vielmehr den Ausgangspunkt für Docker-Container.

Bilder werden mit dem Befehl + docker run + zum Leben erweckt, der einen * Container * durch Hinzufügen einer Lese- / Schreibebene über dem Bild erstellt. Diese Kombination von Nur-Lese-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- / Schreibebene kopiert, wo die Änderungen angewendet werden. Die Version in der Lese- / Schreibebene verbirgt die Originaldatei, entfernt sie jedoch nicht. Änderungen in der Lese- / Schreibebene sind nur innerhalb einer einzelnen Containerinstanz vorhanden. Wenn ein Container gelöscht wird, gehen alle Änderungen verloren, es sei denn, es werden Schritte unternommen, um sie beizubehalten.

Arbeiten mit Containern

Jedes Mal, wenn Sie den Befehl + docker run + verwenden, wird aus dem angegebenen Bild ein neuer Container erstellt. Dies kann zu Verwirrung führen. Schauen wir uns einige Beispiele an:

Schritt 1: Erstellen von zwei Containern

Der folgende Befehl + docker run erstellt einen neuen Container unter Verwendung des Basis-Images` + ubuntu`. + -t + gibt uns ein Terminal und + -i + erlaubt uns, mit ihm zu interagieren. Wir verlassen uns auf den Standardbefehl in der Docker-Datei des Ubuntu-Basisimages, + bash +, um uns in eine Shell abzulegen.

docker run -ti ubuntu

Die Eingabeaufforderung ändert sich und zeigt an, dass wir uns als Root-Benutzer im Container befinden, gefolgt von der 12-stelligen Container-ID.

Wir werden eine Änderung vornehmen, indem wir Text in das Verzeichnis "+ / tmp " des Containers zurückschreiben und dann " cat +" verwenden, um zu überprüfen, ob er erfolgreich gespeichert wurde.

echo "Example1" > /tmp/Example1.txt
cat /tmp/Example1.txt
OutputExample1

Verlassen wir nun den Container.

exit

Docker-Container werden nicht mehr ausgeführt, sobald der von ihnen ausgegebene Befehl abgeschlossen ist, sodass unser Container angehalten wurde, als wir die Bash-Shell verlassen haben. Wenn wir + docker ps +, den Befehl zum Anzeigen laufender Container, ausführen, sehen wir unseren nicht.

docker ps
OutputCONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES

Wenn wir das Flag "+ -a +" hinzufügen, das alle Container anzeigt, die angehalten oder ausgeführt werden, wird unser Container in der Liste angezeigt:

docker ps -a
OutputCONTAINER 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 + der zufällig generierte Name. + ps -a + zeigt die Werte sowie das Bild, aus dem der Container erstellt wurde (+ ubuntu +), als der Container erstellt wurde (+ vor sechs Minuten +), und den Befehl, der darin ausgeführt wurde (+ / bin / bash +). Die Ausgabe liefert auch den Status des Containers (+ Exited +) und wie lange es her ist, dass der Container in diesen Status eingetreten ist (+6 Sekunden her +). Wenn der Container noch läuft, wird der Status "Up" angezeigt, gefolgt von der Laufzeit.

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

docker run -ti ubuntu

Wir können feststellen, dass es sich um einen neuen Container handelt, da sich die ID in der Eingabeaufforderung unterscheidet. Wenn wir nach unserer Example1-Datei suchen, werden wir sie nicht finden:

cat /tmp/Example1
Outputcat: /tmp/Example1: No such file or directory

Dies kann den Anschein erwecken, dass die Daten verschwunden sind. Dies ist jedoch nicht der Fall. Wir verlassen jetzt den zweiten Container, um festzustellen, ob er und unser erster Container mit der von uns erstellten Datei auf dem System vorhanden sind.

exit

Wenn wir die Container erneut auflisten, erscheinen beide:

docker ps -a
OutputCONTAINER 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 den Befehl "+ start " mit dem Flag " -a ", um ihn zu verbinden, und das Flag " -i +", um ihn interaktiv zu machen, gefolgt von der Container-ID oder dem Namen. Stellen Sie sicher, dass Sie die ID Ihres Containers im folgenden Befehl ersetzen:

docker start -ai

Wir befinden uns wieder am Bash-Prompt des Containers und wenn wir die zuvor erstellte Datei "+ cat +", ist sie immer noch da.

cat /tmp/Example1.txt
OutputExample1

Wir können den Container jetzt verlassen:

exit

Diese Ausgabe zeigt, dass die im Container vorgenommenen Änderungen durch Anhalten und Starten des Containers bestehen bleiben. Erst wenn der Container entfernt wird, wird der Inhalt gelöscht. Dieses Beispiel zeigt auch, dass die Änderungen auf den einzelnen Container beschränkt waren. Als wir einen zweiten Container starteten, spiegelte dieser den ursprünglichen Zustand des Bildes wider.

Schritt 3: Löschen beider Container

Wir haben zwei Container erstellt und schließen unser kurzes Lernprogramm mit dem Löschen dieser Container ab. Mit dem Befehl + docker rm +, der nur für angehaltene Container funktioniert, können Sie den Namen oder die ID eines oder mehrerer Container angeben, sodass wir beide mit folgendem Befehl löschen können:

docker rm 11cc47339ee1 kickass_borg
Output11cc47339ee1
kickass_borg

Beide Container und alle darin vorgenommenen Änderungen sind jetzt weg.

Fazit

Wir haben uns den Befehl "+ docker run +" genauer angesehen, um zu sehen, wie er bei jeder Ausführung automatisch einen neuen Container erstellt. Wir haben auch gesehen, wie ein gestoppter Container gefunden, gestartet und eine Verbindung hergestellt wird. Wenn Sie mehr über das Verwalten von Containern erfahren möchten, ist der Leitfaden https://www.digitalocean.com/community/tutorials/naming-docker-containers-3-tips-for-beginners[Naming Docker von Interesse Container: 3 Tipps für Anfänger.