Die Ausstellung verpacken

DockerBeginner
Jetzt üben

Einführung

Marsh House schickt Along the waterline, River edition 1, an einen Empfangskiosk, der keine Image-Registry erreichen kann. Die Ausstellung besteht aus einem Webdienst, einer Datensatz-API und einem Verzeichnis mit Sammlungsdateien. Bereite einen Ordner vor, der alles enthält, um genau diese Version anderswo zu betreiben.

Du solltest grundlegendes Docker-Build/Run, freigegebene Ports und Terminalpfade kennen. Dieses Lab erklärt die kleine Compose-Datei, Image-Archive und das Zusammenstellen portabler Dateien. Programmier- oder Museumskenntnisse sind nicht erforderlich. Docker und die beiden Anwendungs-Images sind vorbereitet. Datensätze und originale schematische Illustrationen sind fiktive Unterrichtsmaterialien.

Nutze Workstation für Befehle und Source Exhibition für das funktionierende Beispiel. Receiving Exhibition beginnt leer; diese Übergabegrenze nutzt du im nächsten unabhängigen Lab. Ergebnis dieses Labs ist ein vollständiges Paket statt eines laufenden Empfängers. Plane etwa 45 Minuten einschließlich Lesen und gewöhnlicher Fehler ein; dies ist eine Schätzung des Autors.

Die vollständige Ausstellung erfassen

In diesem Schritt ermittelst du, was die Übergabe überstehen muss, und speicherst das genaue Image-Paar. Beginne in Source Exhibition. Die Seite zeigt vier Objekte. Öffne Pocket compass, betrachte Illustration und Geschichte und wähle Download field sheet. Dies lädt einen echten Textdatensatz mit Ausgabe, Objekt-ID und Beschreibung herunter. Nutze Back to collection, öffne Crossing ledger und lade auch dieses Datenblatt herunter. Es sind unterschiedliche Objekte mit eigenen Datensätzen und Dateien.

Die Sammlung verknüpft jedes Objekt mit seiner eigenen Detailseite und seinem Datenblattdownload:

Die vier Objekte der Quellausstellung

Wechsle zu Workstation. Es startet in /home/labex/project/exhibition-release. pwd zeigt den aktuellen Ordner, ls listet ihn auf, und cd führt hierher zurück, falls du ihn verlässt:

cd /home/labex/project/exhibition-release
ls

compose.yaml beschreibt die beiden laufenden Dienste. release.json identifiziert diese Ausgabe und die unveränderlichen Image-IDs hinter ihren Tags. collection/ enthält die veröffentlichten JSON-Datensätze, originale SVG-Illustrationen und Textdownloads. author-notes/ enthält unveröffentlichte Entwürfe und muss außerhalb des Pakets bleiben. Lasse sämtliche bereitgestellten Materialien und laufenden Quelldienste unverändert.

cat zeigt eine Textdatei an. Lies den Versionsdatensatz:

cat release.json

Suche die Einträge web und api. Ihre Tags sind field-notes/web:pack und field-notes/api:pack; jeder hat außerdem eine mit sha256: beginnende Image-ID. Ein Tag ist ein Name, der verschoben werden kann. Die ID bezeichnet diese konkreten Image-Inhalte. Liefere die Versionseinträge zusammen; ein funktionierendes Web-Image allein kann weder Datensätze noch Dateien bereitstellen.

mkdir erstellt ein Verzeichnis; -p erstellt fehlende Elternverzeichnisse und akzeptiert ein vorhandenes Verzeichnis. Falls packet bereits aus einem eigenen früheren Versuch existiert, untersuche es mit ls packet und vervollständige es weiter; lösche keine bereitgestellten Quellordner.

mkdir -p packet

--context default adressiert ausdrücklich die Quell-Engine. Ein Kontext benennt eine Verbindung zu einem Docker-Daemon; er ist kein zweiter physischer Rechner. docker image save schreibt Image-Konfiguration, Tags und Dateisystem-Layer. -o benennt die Ausgabedatei. Nimm beide Versions-Tags in dieses eine Archiv auf:

docker --context default image save -o packet/images.tar field-notes/web:pack field-notes/api:pack

Das kann einen Moment dauern und gibt bei Erfolg normalerweise nichts aus. docker container export ist etwas anderes: Es exportiert ein Container-Dateisystem, lässt Image-Metadaten weg und sammelt keine per Bind-Mount eingebundenen Dateien. Es kann diese Image-Übergabe nicht ersetzen.

Die Dateibeziehungen zur Laufzeit lesen

In diesem Schritt stellst du die Verbindung zwischen der Compose-Datei und der gerade genutzten Ausstellung her und kopierst ihre portable Konfiguration. Beginne in Workstation und zeige sie an:

cat compose.yaml

YAML drückt Beziehungen durch Einrückung aus. services: enthält gallery und records. Jedes image: wählt ein vorbereitetes Image; diese Datei enthält kein Build-Rezept. gallery liefert die Browserseiten und fordert seine Sammlung von records an, der API, die die veröffentlichten Materialien liest.

Beide Dienste nutzen network_mode: host: Sie teilen den Netzwerk-Namespace ihres Engine-Hosts. Hier lauscht der Webdienst auf Port 9100 und seine API auf 9101. Die Quell-Engine nutzt das Workstation-Netzwerk. Die empfangende Engine läuft in ihrem eigenen isolierten Container-Netzwerk-Namespace, sodass dieselben Nummern dort nicht die Quelle adressieren. Dies ist eine bewusst kleine, lokale Unterrichtsanordnung, kein allgemeines Rezept für Netzwerksicherheit.

API_ORIGIN ist eine Umgebungsvariable, also ein benannter Wert, der dem Galerieprogramm übergeben wird. Ihr http://127.0.0.1:9101 verweist auf die API in demselben Namespace. records.volumes bindet ./collection schreibgeschützt unter /collection ein, erkennbar an :ro. Der Pfad ./ ist relativ zum Compose-Projektverzeichnis neben compose.yaml. Er ist eine externe Laufzeitabhängigkeit: Die Images enthalten ihn nicht.

Lasse Compose die Datei einlesen, ohne Dienste zu starten oder zu ändern:

docker --context default compose config

--context default wählt ausdrücklich die vorbereitete Quell-Engine; ein Kontext ist eine benannte Verbindung zu einem Docker-Daemon, kein zweiter physischer Computer. Die Ausgabe erweitert den relativen Sammlungspfad zum aktuellen absoluten Quellordner. Behalte für die Lieferung den relativen Pfad der Originaldatei: Würdest du den erweiterten Quellpfad ins Paket kopieren, hinge es weiterhin vom alten Workstation-Speicherort ab.

Der vollständige Satz ist nun klar: zwei Image-Inhalte, eine Compose-Konfiguration und die komplette veröffentlichte Sammlung. Compiler, Quell-Build-Verzeichnis, Entwürfe und laufende Quellcontainer werden nicht benötigt, um die empfangene Ausgabe zu starten.

cp kopiert eine Datei; -r kopiert ein Verzeichnis mit seinen Untereinträgen rekursiv. Kopiere die ursprüngliche portable Konfiguration und veröffentlichte Sammlung:

cp compose.yaml packet/compose.yaml

Ein portables Paket zusammenstellen

In diesem Schritt vervollständigst du das Paket mit seiner veröffentlichten Sammlung und prüfst es als verschiebbare Lieferung. Beginne in Workstation. Erstelle den Sammlungsordner des Pakets und kopiere den Inhalt des Quellverzeichnisses rekursiv. /. bedeutet dessen Inhalt, sodass eine Wiederholung kein weiteres Sammlungsverzeichnis darin verschachtelt:

mkdir -p packet/collection
cp -r collection/. packet/collection/

Untersuche das Ergebnis:

ls packet
ls packet/collection
cat packet/compose.yaml

Die oberste Ebene enthält genau compose.yaml, images.tar und collection. Die Sammlung enthält exhibits.json, art/ und download/. Der Compose-Mount beginnt weiterhin mit ./collection, niemals mit dem absoluten Quellpfad. Kopiere weder author-notes noch release.json ins Laufzeitpaket: Letztere Datei ist dein quellseitiger Nachweis der Auswahl.

Die Existenz einer Datei oder ein großes Archiv beweist keine Vollständigkeit. Die Prüfung lädt deine beiden gespeicherten Images in einen temporären unabhängigen Image-Speicher und führt das Paket dort ohne Netzwerk, Quell-Mounts, Pull oder Build aus. Sie liest sämtliche Datensätze, Illustrationen und heruntergeladenen Bytes und entfernt anschließend ihre isolierten Testressourcen. Sie startet oder verändert die empfangende Ausstellung in deiner tatsächlichen Lab-Umgebung nicht.

Meldet die Prüfung ein fehlendes Image, lies release.json erneut und wiederhole denselben Save-Befehl mit beiden Tags. Fehlt eine Sammlungsdatei, vergleiche die beiden ls-Ergebnisse und kopiere das veröffentlichte Verzeichnis korrekt. Ist ein Pfad falsch, stelle packet/compose.yaml aus der bereitgestellten portablen Datei wieder her. Behalte das Paket für dieses Lab hier; das nächste Lab beginnt mit eigenen unabhängigen Dateien.

Zusammenfassung

Du hast die vollständigen Laufzeitbestandteile einer Anwendung aus zwei Diensten ermittelt, ihre genauen Images gespeichert und ihre externe Sammlung neben einer portablen Compose-Datei zusammengestellt. Das Paket kann in einem unabhängigen Image-Speicher starten, ohne das Quellverzeichnis zu verwenden. Image-Layer allein waren nur ein Teil dieser Lieferung.