Docker -Bild gegen Container

Docker -Bild gegen Container

Wenn Sie den Prozess verstehen, das Docker verwendet, um Daten über Bilder und Container zu speichern, können Sie Ihre Docker -Anwendungen besser gestalten. Docker -Bilder sind wie Vorlagen, während Docker -Container die aus diesen Vorlagen erstellten Instanzen sind. Docker verwendet einen geschichteten Ansatz zum Speichern von Bildern und Containern.

Bilder und Schichten

Ein Docker -Bild wird aus mehreren Ebenen erstellt. Wenn wir ein Beispiel für eine Dockerfile nehmen, wird jede Anweisung in eine Ebene umgewandelt. Hier ist eine einfache Dockerfile:

Vom Knoten: 6.9.2
Server kopieren.JS .
CMD -Knotenserver.JS

Jede Zeile in der obigen Dockerfile erstellt eine Ebene. Die Aussage wird nach dem Knoten suchen: 6.9.2 Bild im lokalen Register. Wenn es dort nicht findet, wird es aus dem Docker -Hub heruntergeladen. Dann erstellt Docker die erste Ebene. Die nächste Kopieranweisung fügt den Server hinzu.JS -Datei zum Bild als zweite Ebene. Die letzte Schicht führt einen Knoten aus.JS -Anwendung. Alle diese Schichten sind übereinander gestapelt. Jede zusätzliche Schicht wird als Unterschied von der Ebene vor ihr hinzugefügt.


Behälter und Schichten

Container werden aus Bildern erstellt. Wenn ein Container aus einem Bild erstellt wird, wird eine dünne Lese-/Schreibebene auf das Bild gestellt (beachten Sie, dass Bildschichten unveränderlich sind, Containerschichten nicht). Alle Änderungen,. Wenn ein Behälter gelöscht wird, wird die zugehörige dünne Lese-/Schreibschicht entfernt. Dies bedeutet, dass mehrere Container dasselbe Bild teilen können. Jede Containerschicht führt ihre eigenen Daten sicher auf dem Docker -Bild auf.


Bilder und Behälter

Versuchen wir ein einfaches Beispiel. Sie können den Befehl Docker Images verwenden, um alle Bilder zu finden:

$ Docker Bilder
Repository -Tag -Bild -ID Erstellte Größe

Und den Befehl Docker PS, Container zu finden:

$ docker ps
Befehl container -ID -Bild erstellt Statusports Namen Namen

Dies ist eine frische Docker -Installation. Es ist also kein Bild oder Container vorhanden. Sie können den Docker Run -it -Knoten: 6 ausführen.9.2 Befehl zum Starten eines Containers.

$ docker run -it node: 6.9.2
Image 'Knoten nicht finden: 6.9.2 'lokal
6.9.2: Ziehen Sie aus Bibliothek/Knoten
75A822CD7888: Abzahlen
57DE64C72267: Pull Complete
4306Be1E8943: Pull Complete
871436ab7225: Pull Complete
0110c26a367a: Pull Complete
1F04Fe713f1b: Pull Complete
AC7C0B5FB553: Abziehen
Digest: SHA256: 2E95BE60FAF429D6C97D928C762CB36F1940F4456CE4BD33FBDC34DE94A5E043
Status: Neuere Bild für Knoten heruntergeladen: 6.9.2
>

Wenn wir nun die Docker -Bilder erneut überprüfen, finden wir:

$ Docker Bilder
Repository -Tag -Bild -ID Erstellte Größe
Knoten 6.9.2 FAAADB4AAF9b vor 11 Monaten 655 MB

Und wenn wir den Container überprüfen, finden wir:

$ docker ps
Befehl container -ID -Bild erstellt Statusports Namen Namen
8C48C7E03BC7 Knoten: 6.9.2 "Knoten" vor 20 Sekunden vor 18 Sekunden Reverent_Jackson

Wenn wir einen anderen Container mit dem Befehl aus demselben Bild starten:

$ docker run -it node: 6.9.2

Und überprüfen Sie noch einmal, wir sehen:

$ Docker Bilder
Repository -Tag -Bild -ID Erstellte Größe
Knoten 6.9.2 FAAADB4AAF9b vor 11 Monaten 655 MB

Und

$ docker ps
Befehl container -ID -Bild erstellt Statusports Namen Namen
96E6DB955276 Knoten: 6.9.2 "Knoten" vor 24 Sekunden vor 23 Sekunden Caky_dijkstra
8C48C7E03BC7 Knoten: 6.9.2 "Knoten" vor 4 Minuten nach 4 Minuten ehrfürchtig_jackson

Die beiden Container mit Container -ID 96E6DB955276 und 8C48C7E03BC7 werden beide mit der Bild -ID FAAADB4AAF9B auf dem Docker -Bild ausgeführt. Die dünnen Lese-/Schreibschichten der Docker -Container befinden sich auf der Ebene des Docker -Bildes.

Hinweise:

Sie können Docker -Container mit dem Befehl Docker RM [Container -ID] entfernen und Docker -Bilder mit dem Befehl Docker RMI [Bild -ID] entfernen.

Der Bildknoten: 6.9.2 Wir haben von Docker Hub heruntergeladen, indem mehrere Ebenen kombiniert werden. Sie können die Bilderschichten mithilfe von Docker -Verlauf [Bild -ID] überprüfen.

$ docker history faaadb4aaf9b
Bild erstellt durch Größe erstellt
faaadb4aaf9b vor 11 Monaten /bin /sh -c #(NOP) CMD ["Knoten"] 0B
Vor 11 Monaten/bin/sh -c curl -slo "https: // nodejs.org/d 42.5mb
Vor 11 Monaten /bin /sh -c #(nop) env node_version = 6.9.2 0b
Vor 11 Monaten /bin /sh -c #(nop) env npm_config_loglebel 0b
Vor 11 Monaten /bin /sh -c set -ex && für Schlüssel in 955 108 KB
Vor 11 Monaten /bin /sh -c GroupAdd -GID 1000 Knoten && u 335KB
Vor 11 Monaten /bin /sh -c APT-Get Update && Apt-Get Insta 323MB

Abschluss

Eine beliebte Methode, um Bilder und Behälter zu erklären, besteht darin, ein Bild mit einer Klasse und einem Container mit der Instanz dieser Klasse zu vergleichen. Der geschichtete Ansatz von Docker -Bildern und -Containern hält die Größe von Bildern und Behältern klein.

Verweise:

  • https: // docs.Docker.com/motor/userguide/storagedriver/imagesandcontainers/
  • Docker -Bild gegen Container
  • https: // stackoverflow.com/Fragen/23735149/Docker-Image-VS-Container