So verwenden Sie Docker Cp zum Kopieren von Dateien zwischen Host und Containern - CloudSavvy IT
Webagentur » Digitale Nachrichten » So verwenden Sie Docker Cp zum Kopieren von Dateien zwischen Host und Containern -

So verwenden Sie Docker Cp zum Kopieren von Dateien zwischen Host und Containern -

Müssen Dateien in oder aus einem Docker-Container geladen werden? Die docker cp Mit dem Befehl können Sie zwischen Host- und Container-Dateisystemen kopieren, um Konfigurationsdetails hinzuzufügen, Sicherungen zu erstellen und vorhandene Daten wiederherzustellen.

Grundlegende Syntax

docker cp akzeptiert Quell- und Zielpfade als seine beiden Argumente:

docker cp example.txt my-container: /example.txt

Ici example.txt kopiert Ihr Arbeitsverzeichnis nach /example.txt in my-container Container. Sie können die beiden Argumente zum Kopieren umkehren /example.txt aus dem Container und in Ihr Arbeitsverzeichnis.

Dem Argument, das sich auf den Containerpfad bezieht, muss eine Containerkennung oder ein Containername gefolgt von einem Doppelpunkt (:). Die ID oder den Namen eines laufenden Containers finden Sie mit docker ps.

jeder docker cp Der Befehl benötigt einen lokalen Dateisystempfad und einen Containerpfad - Sie können nicht direkt zwischen zwei Containern kopieren. Verwenden Sie in diesem Fall ein mehrstufiges Verfahren, indem Sie zuerst vom Quellcontainer in Ihr Dateisystem und dann vom neuen lokalen Pfad in den Zielcontainer kopieren.

Ganze Verzeichnisse kopieren

docker cp kann auch Verzeichnisse rekursiv kopieren:

docker cp/home/demo/website apache-container:/var/www/html/.

Docker kopiert alles nach /home/demo/website und übertrage es auf /var/www/html.

Kopierverhalten

Wenn Sie eine Datei kopieren, erstellt Docker am Ziel eine neue Datei, falls diese noch nicht vorhanden ist. Die vorhandenen Dateien werden mit dem neuen Inhalt überschrieben. Wenn das Ziel ein Verzeichnis ist, wird die Datei unter Verwendung des Quelldateinamens dorthin kopiert. Eine Ausnahme ist, wenn das angegebene Ziel mit a . endet /, bezeichnet ein Verzeichnis, aber der Pfad existiert noch nicht. In diesem Szenario wird ein Fehler generiert.

Bei Verzeichniskopien ist der Vorgang etwas komplizierter. Am Ziel wird ein neues Verzeichnis mit dem Inhalt des Quellverzeichnisses angelegt, falls der Zielpfad noch nicht existiert. Wenn es vorhanden ist, unterscheidet sich das Verhalten je nachdem, ob Sie a . aufgenommen haben oder nicht /. Komponente im Pfad.

  • /. ist vorhanden - Die Quelle Verzeichnis wird in das vorhandene Zielverzeichnis kopiert.
  • /. ist nicht vorhanden - Die Teneur aus dem Quellverzeichnis wird zum Ziel kopiert.

Die feine Unterscheidung bestimmt, ob innerhalb des Ziels ein neues Unterverzeichnis erstellt wird.

Bestellbeschränkungen

Trotz seines Namens docker cp ist keine vollständige Implementierung der cp Shell-Befehl. Die cp Flags werden nicht unterstützt außer für -a et -L:

  • -a - Archivmodus, der Benutzer- und Gruppendetails zu kopierten Dateien beibehält.
  • -L - Folgen Sie symbolischen Links im Quellverzeichnis, um den Inhalt der Linkziele zu kopieren, und nicht die Links selbst.

Für komplexere Anwendungsfälle, in denen selektives Kopieren erforderlich ist, müssen Sie einen anderen Ansatz verwenden.

Verwenden Sie Link-Mounts, um Dateien zu kopieren

Docker-Volumes bieten eine weitere Möglichkeit, Dateien zwischen Containern und Ihrem Host zu verschieben. Wenn Sie ein lokales Verzeichnis an einen Container binden, können Sie auf dessen Inhalt von Ihrem Host-Dateisystem zugreifen, sodass die Verwendung entfällt docker cp.

docker run -v / example / host / directory: / container / path my-image: Latest

Der Inhalt von /example/host/directory Pfad werden im Container-Dateisystem unter eingehängt /container/path. Sie können mit diesen Dateien außerhalb von Docker mit vertrauten Tools interagieren, wie z cp, rsync, und Ihren Grafikdateibrowser.

Diese Technik ist nur nützlich, wenn Sie mit einem einzelnen Containerverzeichnis arbeiten. Es funktioniert nicht gut beim Kopieren von beliebigen Orten, da Sie im Voraus wissen müssen, welche Pfade Sie beim Erstellen des Containers verwenden.

Sie sollten auch bei Dateisystemberechtigungen vorsichtig sein: Dateien, die im Container erstellt werden, gehören normalerweise root. Dies kann zu schwierigen Szenarien auf dem Host führen, in denen Sie Dateien im verknüpften Verzeichnis nicht bearbeiten oder löschen können. Verwenden Sie die chown Befehl auf dem Host und innerhalb des Containers, um den Besitz je nach Umgebung bei Bedarf zu ändern.

Wie wäre es mit COPY in Dockerfiles?

docker cp kann manchmal mit dem verwechselt werden COPY Anweisungen in Dockerfiles. Es ist wichtig zu erkennen, dass diese beiden Funktionen sehr unterschiedlichen Anwendungsfällen dienen.

COPY kann nicht verwendet werden, um Dateien zwischen Ihrem Host und einem laufenden Container zu verschieben. Dies ist zum Einfügen von Dateien Bilder während des Bauprozesses:

COPY / home / me / my-website / var / www / html /.

Dabei wird der Quellcode der Website im Rahmen eines Builds in ein Image kopiert. Es ist ein einzigartiger Prozess. Jeder Container, der mit dem Image gestartet wurde, würde die Website-Quelle so enthalten, wie sie zur Laufzeit war docker build.

docker cp ermöglicht es Ihnen, diesen Quellcode durch eine neuere Version zu ersetzen, sobald ein Container ausgeführt wird. COPY Anweisungen werden verwendet, um Dateien zu einem statischen Bild zu machen; cp die Aufträge interagieren direkt mit den Containern.

Wann Dateien mit Docker kopieren?

Das manuelle Kopieren von Dateien von Ihrem Host in einen Docker-Container oder umgekehrt sollte relativ selten vorkommen. Images sollen autark sein, daher sollten sie alles enthalten, was Sie zum Starten einer Instanz benötigen. Die Konfiguration wird normalerweise über Umgebungsvariablen verwaltet.

Container, die Daten dauerhaft speichern müssen, sollten Docker-Volumes verwenden. Volumes ermöglichen es Daten, jeden Container zu überleben, also müssen Sie dies nicht tun docker cp bevor Sie eine Instanz ersetzen. Kopieren Sie beim Durchführen von Backups die Volumes von Ihrem Host, anstatt die Dateien aus den Containern zu entfernen.

docker cp ist besonders nützlich beim Debuggen von Containern oder beim Arbeiten in einer Entwicklungsumgebung. Manchmal müssen Sie manuell eine temporäre Konfigurationsdatei einfügen oder ein verstecktes Protokoll extrahieren. Verwenden von docker cp ist schneller und bequemer, als jedes Mal, wenn Sie den Code ändern, das gesamte Bild neu zu erstellen.

Denken Sie immer daran, dass die kopierten Dateien in Container bleiben nur so lange bestehen, wie der Container am Leben ist. Wenn Sie einen anderen Container aus demselben Image starten, erhalten Sie einen sauberen Schiefer, abzüglich der Dateien, die Sie mit hinzugefügt haben docker cp.

Zusammenfassung

docker cp ermöglicht es Ihnen, Dateien zwischen Ihrem Host und Ihren Docker-Containern zu verschieben. Es funktioniert mit Dateien und Verzeichnissen, aber es fehlen die meisten der erweiterten Shell-Funktionen cp Kommandant.

Regelmäßige Verwendung von docker cp weist auf eine potenzielle Abweichung von den besten Container-Praktiken hin. Es ist ratsam, es als praktisches Werkzeug für die Entwicklung zu betrachten und nicht als integralen Bestandteil der Arbeit mit Containern. Eine langfristige Dateipersistenz sollte mit Volumes implementiert werden, da sie erstklassige Komponenten im Docker-Ökosystem sind.

★ ★ ★ ★ ★