GNU/Linux >> LINUX-Kenntnisse >  >> Panels >> Docker

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

Müssen Sie einige Dateien in oder aus einem Docker-Container verschieben? Der docker cp Mit dem Befehl können Sie zwischen Host- und Container-Dateisystemen kopieren, sodass Sie Konfigurationsdetails hinzufügen, Sicherungen erstellen und vorhandene Daten wiederherstellen können.

Grundlegende Syntax

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

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

Hier example.txt wird aus Ihrem Arbeitsverzeichnis nach /example.txt kopiert im my-container Container. Sie könnten die beiden Argumente umkehren, um /example.txt zu kopieren aus dem Container und in Ihr Arbeitsverzeichnis.

Dem Argument, das auf den Containerpfad verweist, muss eine Container-ID oder ein Containername gefolgt von einem Doppelpunkt vorangestellt werden (: ). 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 ein mehrstufiges Verfahren, wenn Sie dies tun müssen, indem Sie zuerst vom Quellcontainer in Ihr Dateisystem und dann vom neuen lokalen Pfad in den Zielcontainer kopieren.

Komplette Verzeichnisse kopieren

docker cp kann Verzeichnisse auch rekursiv kopieren:

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

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

Kopierverhalten

Wenn Sie eine Datei kopieren, erstellt Docker am Zielort eine neue Datei, falls sie noch nicht vorhanden ist. Vorhandene Dateien werden mit dem neuen Inhalt überschrieben. Wenn das Ziel ein Verzeichnis ist, wird die Datei unter Verwendung des Quelldateinamens hineinkopiert. Eine Ausnahme ist, wenn das angegebene Ziel mit einem / endet , was ein Verzeichnis bezeichnet, aber der Pfad existiert noch nicht. In diesem Szenario wird ein Fehler ausgelöst.

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

  • /. ist vorhanden – Das Quellverzeichnis wird in das vorhandene Zielverzeichnis kopiert.
  • /. ist nicht vorhanden – Der Inhalt des Quellverzeichnisses wird in das Ziel kopiert.

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

Befehlseinschränkungen

Trotz seines Namens docker cp ist keine vollständige Implementierung des cp Shell-Befehl. Der cp Flags werden nicht unterstützt, mit Ausnahme von -a und -L :

  • -a – Archivierungsmodus, der Benutzer- und Gruppendetails zu kopierten Dateien beibehält.
  • -L – Folgen Sie Symlinks im Quellverzeichnis, um den Inhalt von Linkzielen zu kopieren, anstatt die Links selbst.

Für fortgeschrittenere Anwendungsfälle, in denen selektives Kopieren erforderlich ist, müssen Sie auf einen anderen Ansatz zurückgreifen.

Bind-Mounts zum Kopieren von Dateien verwenden

Docker-Volumes bieten eine weitere Möglichkeit, Dateien zwischen Containern und Ihrem Host zu verschieben. Durch das Bind-Mounten eines lokalen Verzeichnisses in einen Container können Sie von Ihrem Host-Dateisystem aus auf dessen Inhalt zugreifen, wodurch die Verwendung von docker cp entfällt .

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

Der Inhalt von /example/host/directory path werden im Dateisystem des Containers unter /container/path gemountet . Sie können mit diesen Dateien außerhalb von Docker mit vertrauten Tools wie cp interagieren , rsync , und Ihren grafischen Dateibrowser.

Diese Technik ist nur nützlich, wenn Sie mit einem einzelnen Containerverzeichnis arbeiten. Es funktioniert nicht gut, wenn Sie von beliebigen Orten kopieren, da Sie die Pfade kennen müssen, die Sie im Voraus verwenden werden, wenn der Container erstellt wird.

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

Was ist mit COPY in Dockerfiles?

docker cp kann manchmal mit COPY verwechselt werden Anleitung 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. Es dient zum Einfügen von Dateien in Bilder während des Erstellungsprozesses:

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

Hier wird der Website-Quellcode als Teil eines Builds in ein Bild kopiert. Dies ist ein einmaliger Vorgang. Jeder aus dem Image gestartete Container würde die Website-Quelle enthalten, wie sie zum Zeitpunkt der Ausführung von docker build war .

docker cp können Sie diesen Quellcode durch eine neuere Version ersetzen, sobald ein Container ausgeführt wird. COPY Anweisungen dienen dazu, Dateien zu einem Teil eines statischen Bildes zu machen; cp Befehle interagieren mit Live-Containern.

Wann werden Dateien mit Docker kopiert?

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

Container, die Daten dauerhaft speichern müssen, sollten Docker-Volumes verwenden. Volumes ermöglichen es Daten, jeden einzelnen Container zu überdauern, sodass Sie nicht manuell docker cp müssen bevor eine Instanz ersetzt wird. Wenn Sie Backups erstellen, kopieren Sie die Volumes von Ihrem Host, anstatt Dateien aus Containern zu ziehen.

docker cp ist am nützlichsten beim Debuggen von Containern oder beim Arbeiten in einer Entwicklungsumgebung. Manchmal müssen Sie eine temporäre Konfigurationsdatei manuell einfügen oder ein vergrabenes Protokoll herausziehen. Verwenden von docker cp ist schneller und bequemer, als das gesamte Image jedes Mal neu zu erstellen, wenn Sie eine Codeänderung vornehmen.

Denken Sie immer daran, dass Dateien nach kopiert werden Container bestehen nur so lange, wie der Container lebt. Wenn Sie einen anderen Container aus demselben Image starten, erhalten Sie eine saubere Weste ohne die Dateien, die Sie mit docker cp hinzugefügt haben .

Zusammenfassung

docker cp können Sie Dateien zwischen Ihrem Host und Ihren Docker-Containern verschieben. Es funktioniert mit Dateien und Verzeichnissen, aber es fehlen die meisten erweiterten Funktionen des Shell-basierten cp Befehl.

Regelmäßige Nutzung von docker cp weist auf eine potenzielle Abweichung von Best Practices für Container hin. Es ist ratsam, es als praktisches Tool für die Entwicklung zu verwenden und nicht als integralen Bestandteil der Arbeit mit Containern. Die langfristige Dateipersistenz sollte mit Volumes implementiert werden, da diese erstklassige Komponenten im Docker-Ökosystem sind.


Docker
  1. Unterschied zwischen Podman und Docker.

  2. So verwenden Sie Docker-Images, Container und Dockerfiles im Detail

  3. So verwenden Sie Docker Compose

  4. Wie und warum man einen Remote-Docker-Host verwendet

  5. So kopieren Sie Dateien zwischen Kubernetes-Pods und Ihrem Computer

So erhalten Sie die IP-Adresse eines Docker-Containers vom Host

So verwenden Sie Docker:Bild speichern und zum Teilen exportieren

So kopieren Sie Dateien mit Docker cp in Ihren Docker-Container

So kopieren Sie Dateien zwischen Host und Docker-Container

So führen Sie Docker-Container aus

So benennen oder umbenennen Sie Docker-Container