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:
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:
Repository -Tag -Bild -ID Erstellte Größe |
Und den Befehl Docker PS, Container zu finden:
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 |
57DE64C72267: Pull Complete |
4306Be1E8943: Pull Complete |
871436ab7225: Pull Complete |
0110c26a367a: Pull Complete |
1F04Fe713f1b: Pull Complete |
Digest: SHA256: 2E95BE60FAF429D6C97D928C762CB36F1940F4456CE4BD33FBDC34DE94A5E043 |
Status: Neuere Bild für Knoten heruntergeladen: 6.9.2 |
Wenn wir nun die Docker -Bilder erneut überprüfen, finden wir:
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:
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:
Repository -Tag -Bild -ID Erstellte Größe |
Knoten 6.9.2 FAAADB4AAF9b vor 11 Monaten 655 MB |
Und
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