Unterschied zwischen Docker-Bildern und Containern

1. Übersicht

Docker ist ein Tool zum einfachen Erstellen, Bereitstellen und Ausführen von Anwendungen. Es ermöglicht uns, unsere Anwendungen mit allen Abhängigkeiten zu verpacken und als einzelne Bundles zu verteilen. Docker garantiert, dass unsere Anwendung auf jeder Docker-Instanz auf dieselbe Weise ausgeführt wird.

Wenn wir Docker verwenden, müssen zwei Hauptkonzepte klar sein: Bilder und Container .

In diesem Tutorial erfahren Sie, was sie sind und wie sie sich unterscheiden.

2. Docker-Bilder

Ein Image ist eine Datei, die eine gepackte Anwendung mit allen Abhängigkeiten darstellt, die für eine ordnungsgemäße Ausführung erforderlich sind. Mit anderen Worten, wir könnten sagen, dass ein Docker-Image wie eine Java-Klasse ist .

Bilder werden als eine Reihe von Ebenen erstellt . Schichten werden übereinander montiert. Was ist eine Schicht? Einfach ausgedrückt ist eine Ebene ein Bild.

Angenommen, wir möchten ein Docker-Image einer Hello World Java-Anwendung erstellen. Das erste, worüber wir nachdenken müssen, ist, was unsere Anwendung benötigt.

Zu Beginn ist es eine Java-Anwendung, daher benötigen wir eine JVM. OK, das scheint einfach zu sein, aber was muss eine JVM ausführen? Es braucht ein Betriebssystem. Daher verfügt unser Docker-Image über eine Betriebssystemebene, eine JVM und unsere Hello World-Anwendung .

Ein großer Vorteil von Docker ist seine große Community. Wenn wir auf einem Image aufbauen möchten, können wir zu Docker Hub gehen und suchen, ob das benötigte Image verfügbar ist.

Angenommen, wir möchten eine Datenbank mithilfe der PostgreSQL-Datenbank erstellen. Wir müssen kein neues PostgreSQL-Image von Grund auf neu erstellen. Wir gehen einfach zu Docker Hub, suchen nach Postgres , dem offiziellen Docker- Bildnamen für PostgresSQL, wählen die gewünschte Version aus und führen sie aus.

Jedes Bild, das wir von Docker Hub erstellen oder abrufen, wird in unserem Dateisystem gespeichert und durch seinen Namen und sein Tag identifiziert. Es kann auch anhand seiner Bild-ID identifiziert werden .

Mit dem Befehl docker images können wir eine Liste der Bilder anzeigen, die in unserem Dateisystem verfügbar sind:

$ docker images REPOSITORY TAG IMAGE ID CREATED SIZE postgres 11.6 d3d96b1e5d48 4 weeks ago 332MB mongo latest 9979235fc504 6 weeks ago 364MB rabbitmq 3-management 44c4867e4a8b 8 weeks ago 180MB mysql 8.0.18 d435eee2caa5 2 months ago 456MB jboss/wildfly 18.0.1.Final bfc71fe5d7d1 2 months ago 757MB flyway/flyway 6.0.8 0c11020ffd69 3 months ago 247MB java 8-jre e44d62cf8862 3 years ago 311MB

3. Ausführen von Docker-Images

Ein Image wird mit dem Docker- Befehl run mit dem Bildnamen und dem Tag ausgeführt. Angenommen, wir möchten das postgres 11.6-Image ausführen:

docker run -d postgres:11.6

Beachten Sie, dass wir die Option -d bereitgestellt haben . Dadurch wird Docker angewiesen, das Bild im Hintergrund auszuführen - auch als getrennter Modus bezeichnet.

Mit dem Befehl docker ps können wir überprüfen, ob unser Image ausgeführt wird. Wir sollten diesen Befehl verwenden:

$ docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 3376143f0991 postgres:11.6 "docker-entrypoint.s…" 3 minutes ago Up 3 minutes 5432/tcp tender_heyrovsky

Beachten Sie die CONTAINER-ID in der obigen Ausgabe. Schauen wir uns an, was ein Container ist und wie er mit einem Bild zusammenhängt.

4. Docker-Container

Ein Container ist eine Instanz eines Bildes. Jeder Container kann anhand seiner ID identifiziert werden. Zurück zu unserer Java-Entwicklungsanalogie können wir sagen, dass ein Container wie eine Instanz einer Klasse ist .

Docker definiert sieben Staaten für einen Container: erstellt , neu zu starten , laufen , zu entfernen , machte eine Pause , verlassen und tot . Das ist wichtig zu wissen. Da ein Container nur eine Instanz des Images ist, muss er nicht ausgeführt werden.

Lassen Sie uns nun noch einmal über den Befehl run nachdenken, den wir oben gesehen haben. Wir haben gesagt, dass es zum Ausführen von Bildern verwendet wird, aber das ist nicht ganz genau. Die Wahrheit ist, dass der Befehl run verwendet wird, um einen neuen Container des Bildes zu erstellen und zu starten .

Ein großer Vorteil ist, dass Container wie leichte VMs sind. Ihr Verhalten ist völlig voneinander isoliert. Dies bedeutet, dass wir mehrere Container desselben Bildes ausführen können, wobei sich jeder in einem anderen Zustand mit unterschiedlichen Daten und unterschiedlichen IDs befindet.

Die gleichzeitige Ausführung mehrerer Container desselben Images ist ein großer Vorteil, da wir damit Anwendungen auf einfache Weise skalieren können. Denken wir zum Beispiel an Microservices. Wenn jeder Dienst als Docker-Image gepackt ist, bedeutet dies, dass neue Dienste bei Bedarf als Container bereitgestellt werden können.

5. Lebenszyklus von Containern

Zuvor haben wir die sieben Zustände eines Containers erwähnt. Nun wollen wir sehen, wie wir das Docker- Befehlszeilentool verwenden können, um die verschiedenen Lebenszykluszustände zu verarbeiten.

Um einen neuen Container zu starten, müssen wir ihn erstellen und dann starten . Dies bedeutet, dass es den Erstellungsstatus durchlaufen muss, bevor es ausgeführt werden kann. Wir können dies tun, indem wir den Container explizit erstellen und starten:

docker container create : docker container start 

Oder wir können dies einfach mit dem Befehl run tun :

docker run :

Wir können einen laufenden Container anhalten und ihn dann wieder in den laufenden Zustand versetzen:

docker pause  docker unpause 

Ein angehaltener Container zeigt "Angehalten" als Status an, wenn wir die Prozesse überprüfen:

$ docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 9bef2edcad7b postgres:11.6 "docker-entrypoint.s…" 5 minutes ago Up 4 minutes (Paused) 5432/tcp tender_heyrovsky

Wir können auch einen laufenden Container stoppen und dann erneut ausführen:

docker stop  docker start 

Und schließlich können wir einen Container entfernen:

docker container rm 

Nur Container im gestoppten oder erstellten Zustand können entfernt werden.

Weitere Informationen zu den Docker-Befehlen finden Sie in der Docker-Befehlszeilenreferenz.

6. Fazit

In diesem Artikel haben wir Docker-Bilder und -Container und ihre Unterschiede erläutert. Bilder beschreiben die Anwendungen und wie sie ausgeführt werden können. Container sind die Image-Instanzen, in denen mehrere Container desselben Images in einem anderen Status ausgeführt werden können.

Wir haben auch über den Lebenszyklus der Container gesprochen und die grundlegenden Befehle zu deren Verwaltung gelernt.

Jetzt, da wir die Grundlagen kennen, ist es Zeit, mehr über die aufregende Welt von Docker zu erfahren und unser Wissen zu erweitern!