Wie man den docker container cp Befehl zum Kopieren von Dateien verwendet

DockerDockerBeginner
Jetzt üben

💡 Dieser Artikel wurde von AI-Assistenten übersetzt. Um die englische Version anzuzeigen, können Sie hier klicken

Einführung

In diesem Lab lernen Sie, wie Sie den Befehl docker container cp effektiv nutzen können, um Dateien zwischen Ihrem lokalen Dateisystem und Docker-Containern zu kopieren. Diese praktische Übung behandelt wesentliche Szenarien, darunter das Kopieren von Dateien von Ihrem lokalen Rechner in einen laufenden Container, das Abrufen von Dateien aus einem Container auf Ihr lokales System sowie die Nutzung von Streaming-Fähigkeiten zur Datenübertragung über STDOUT und STDIN.

Anhand praktischer Beispiele erlangen Sie Kompetenz im Umgang mit dem Datenfluss für Ihre containerisierten Anwendungen. Sie lernen, wie Sie einzelne Dateien, Verzeichnisse und sogar Datenströme kopieren können, was Ihnen die erforderliche Flexibilität für verschiedene Entwicklungs- und Bereitstellungsaufgaben bietet.


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL docker(("Docker")) -.-> docker/ContainerOperationsGroup(["Container Operations"]) docker(("Docker")) -.-> docker/ImageOperationsGroup(["Image Operations"]) docker(("Docker")) -.-> docker/VolumeOperationsGroup(["Volume Operations"]) docker/ContainerOperationsGroup -.-> docker/run("Run a Container") docker/ContainerOperationsGroup -.-> docker/ps("List Running Containers") docker/ContainerOperationsGroup -.-> docker/start("Start Container") docker/ContainerOperationsGroup -.-> docker/stop("Stop Container") docker/ContainerOperationsGroup -.-> docker/rm("Remove Container") docker/ContainerOperationsGroup -.-> docker/exec("Execute Command in Container") docker/ImageOperationsGroup -.-> docker/pull("Pull Image from Repository") docker/VolumeOperationsGroup -.-> docker/cp("Copy Data Between Host and Container") subgraph Lab Skills docker/run -.-> lab-555105{{"Wie man den docker container cp Befehl zum Kopieren von Dateien verwendet"}} docker/ps -.-> lab-555105{{"Wie man den docker container cp Befehl zum Kopieren von Dateien verwendet"}} docker/start -.-> lab-555105{{"Wie man den docker container cp Befehl zum Kopieren von Dateien verwendet"}} docker/stop -.-> lab-555105{{"Wie man den docker container cp Befehl zum Kopieren von Dateien verwendet"}} docker/rm -.-> lab-555105{{"Wie man den docker container cp Befehl zum Kopieren von Dateien verwendet"}} docker/exec -.-> lab-555105{{"Wie man den docker container cp Befehl zum Kopieren von Dateien verwendet"}} docker/pull -.-> lab-555105{{"Wie man den docker container cp Befehl zum Kopieren von Dateien verwendet"}} docker/cp -.-> lab-555105{{"Wie man den docker container cp Befehl zum Kopieren von Dateien verwendet"}} end

Lokale Datei in einen Container kopieren

In diesem Schritt lernen Sie, wie Sie eine Datei von Ihrem lokalen Dateisystem in einen laufenden Docker-Container kopieren. Dies ist eine häufige Aufgabe, wenn Sie nach dem Start eines Containers Konfigurationsdateien, Skripte oder andere Daten hinzufügen müssen.

Erstellen wir zunächst eine einfache Textdatei auf Ihrem lokalen Rechner im Verzeichnis ~/project.

echo "This is a test file." > ~/project/test_file.txt

Dieser Befehl erstellt eine Datei namens test_file.txt in Ihrem ~/project-Verzeichnis und schreibt den Text "This is a test file." hinein.

Als Nächstes benötigen wir einen laufenden Container, in den wir die Datei kopieren können. Wir verwenden hierfür ein einfaches ubuntu-Image. Da das Image möglicherweise nicht lokal vorhanden ist, laden wir es zunächst herunter.

docker pull ubuntu:latest

Dieser Befehl lädt die neueste Version des ubuntu-Images von Docker Hub herunter.

Nun starten wir einen Container basierend auf dem ubuntu-Image. Wir führen ihn im Detached-Modus (-d) aus und vergeben einen Namen (my_ubuntu_container) zur einfachen Identifizierung.

docker run -d --name my_ubuntu_container ubuntu:latest sleep infinity

Dieser Befehl startet einen neuen Container namens my_ubuntu_container mit dem ubuntu:latest-Image. Der Befehl sleep infinity hält den Container unbegrenzt am Laufen, was für Demonstrationszwecke nützlich ist.

Sie können überprüfen, ob der Container läuft, indem Sie den Befehl docker ps verwenden.

docker ps

In der Ausgabe sollte my_ubuntu_container aufgeführt sein.

Jetzt können wir die Datei test_file.txt von Ihrem lokalen Rechner in den laufenden Container kopieren, indem wir den Befehl docker cp verwenden. Die Syntax lautet docker cp <lokaler_Pfad> <Container_Name>:<Container_Pfad>.

docker cp ~/project/test_file.txt my_ubuntu_container:/tmp/

Dieser Befehl kopiert die Datei ~/project/test_file.txt in das Verzeichnis /tmp/ innerhalb des Containers my_ubuntu_container.

Um zu überprüfen, ob die Datei erfolgreich kopiert wurde, können Sie einen Befehl innerhalb des Containers mit docker exec ausführen. Wir verwenden ls, um die Dateien im /tmp/-Verzeichnis des Containers aufzulisten.

docker exec my_ubuntu_container ls /tmp/

In der Ausgabe sollte test_file.txt aufgeführt sein, was den erfolgreichen Kopiervorgang bestätigt.

Abschließend bereinigen wir den erstellten Container.

docker stop my_ubuntu_container
docker rm my_ubuntu_container

Diese Befehle stoppen bzw. entfernen den Container.

Dateien aus einem Container in das lokale Dateisystem kopieren

In diesem Schritt lernen Sie, wie Sie Dateien aus einem laufenden Docker-Container in Ihr lokales Dateisystem kopieren. Dies ist nützlich, um Logs, Konfigurationsdateien oder andere innerhalb eines Containers erzeugte oder modifizierte Daten abzurufen.

Stellen wir zunächst sicher, dass wir einen laufenden Container zur Verfügung haben. Wir verwenden hierfür den my_ubuntu_container aus dem vorherigen Schritt. Falls dieser nicht läuft, starten wir ihn.

docker start my_ubuntu_container

Dieser Befehl startet den Container namens my_ubuntu_container.

Nun erstellen wir eine Datei innerhalb des Containers, die wir auf unseren lokalen Rechner kopieren werden. Wir verwenden docker exec, um einen Befehl innerhalb des Containers auszuführen, der eine Datei namens container_file.txt im Verzeichnis /root/ erstellt.

docker exec my_ubuntu_container sh -c 'echo "This file is from the container." > /root/container_file.txt'

Dieser Befehl führt einen Shell-Befehl innerhalb von my_ubuntu_container aus, um die Datei /root/container_file.txt mit dem angegebenen Inhalt zu erstellen.

Um zu überprüfen, ob die Datei im Container erstellt wurde, können Sie docker exec verwenden, um die Dateien im /root/-Verzeichnis des Containers aufzulisten.

docker exec my_ubuntu_container ls /root/

In der Ausgabe sollte container_file.txt aufgeführt sein.

Jetzt können wir die Datei container_file.txt aus dem Container auf Ihren lokalen Rechner kopieren, indem wir den Befehl docker cp verwenden. Die Syntax für das Kopieren von einem Container auf den lokalen Rechner lautet docker cp <Container_Name>:<Container_Pfad> <lokaler_Pfad>. Wir kopieren sie in Ihr ~/project-Verzeichnis.

docker cp my_ubuntu_container:/root/container_file.txt ~/project/

Dieser Befehl kopiert die Datei /root/container_file.txt aus my_ubuntu_container in Ihr lokales Verzeichnis ~/project/.

Um zu bestätigen, dass die Datei erfolgreich auf Ihren lokalen Rechner kopiert wurde, listen Sie die Dateien in Ihrem ~/project-Verzeichnis auf.

ls ~/project/

In der Ausgabe sollten sowohl container_file.txt als auch die Datei test_file.txt aus dem vorherigen Schritt erscheinen.

Sie können den Inhalt der kopierten Datei auch mit dem Befehl cat anzeigen.

cat ~/project/container_file.txt

Die Ausgabe sollte "This file is from the container." lauten, was den korrekten Kopiervorgang bestätigt.

Abschließend bereinigen wir den Container.

docker stop my_ubuntu_container
docker rm my_ubuntu_container

Dateiinhalt aus einem Container an STDOUT streamen

In diesem Schritt lernen Sie, wie Sie den Inhalt einer Datei aus einem laufenden Docker-Container direkt an die Standardausgabe (STDOUT) Ihres lokalen Rechners streamen können. Dies ist nützlich, um schnell den Inhalt einer Datei innerhalb eines Containers einzusehen, ohne sie explizit kopieren zu müssen.

Stellen Sie zunächst sicher, dass der my_ubuntu_container läuft. Falls nicht, starten Sie ihn.

docker start my_ubuntu_container

Nun erstellen wir eine weitere Datei innerhalb des Containers, deren Inhalt wir an STDOUT streamen werden. Wir legen eine Datei namens stream_test.log im Verzeichnis /var/log/ des Containers an.

docker exec my_ubuntu_container sh -c 'echo "This is a log entry." > /var/log/stream_test.log'

Dieser Befehl führt einen Shell-Befehl innerhalb von my_ubuntu_container aus, um die Datei /var/log/stream_test.log mit dem angegebenen Inhalt zu erstellen.

Um den Inhalt dieser Datei an Ihre lokale STDOUT zu streamen, können Sie den docker exec-Befehl mit dem cat-Befehl innerhalb des Containers verwenden.

docker exec my_ubuntu_container cat /var/log/stream_test.log

Dieser Befehl führt cat /var/log/stream_test.log innerhalb des my_ubuntu_container aus. Die Ausgabe dieses Befehls wird dann an die STDOUT Ihres lokalen Terminals gestreamt.

Sie sollten den Inhalt "This is a log entry." direkt in Ihrem Terminal ausgegeben sehen. Dies zeigt, wie Sie schnell den Inhalt einer Datei innerhalb eines Containers einsehen können, ohne die gesamte Datei kopieren zu müssen.

Abschließend bereinigen wir den Container.

docker stop my_ubuntu_container
docker rm my_ubuntu_container

Lokales tar-Archiv per STDIN in einen Container streamen

In diesem Schritt lernen Sie, wie Sie ein lokales tar-Archiv direkt in einen laufenden Docker-Container über Standard-Eingabe (STDIN) streamen können. Dies ist eine effiziente Methode, um mehrere Dateien oder Verzeichnisse in einen Container zu übertragen, ohne Zwischendateien auf Ihrem lokalen System zu erstellen.

Erstellen wir zunächst ein Verzeichnis und einige Dateien in Ihrem ~/project-Verzeichnis, die wir archivieren und streamen werden.

mkdir ~/project/my_files
echo "File 1 content." > ~/project/my_files/file1.txt
echo "File 2 content." > ~/project/my_files/file2.txt

Dies erstellt ein Verzeichnis my_files mit zwei Textdateien darin.

Stellen Sie nun sicher, dass der my_ubuntu_container läuft. Falls nicht, starten Sie ihn.

docker start my_ubuntu_container

Um ein tar-Archiv in den Container zu streamen, verwenden wir den tar-Befehl, um ein Archiv des my_files-Verzeichnisses zu erstellen, und leiten dessen Ausgabe per Pipe (|) an den docker exec-Befehl weiter. Im Container verwenden wir erneut den tar-Befehl, um das Archiv zu extrahieren.

Wir streamen das Archiv in das /opt/-Verzeichnis des Containers.

tar -cvf - ~/project/my_files | docker exec -i my_ubuntu_container tar -xvf - -C /opt/

Lassen Sie uns diesen Befehl aufschlüsseln:

  • tar -cvf - ~/project/my_files: Erstellt ein tar-Archiv (-c) mit ausführlicher Ausgabe (-v) des ~/project/my_files-Verzeichnisses. Die Option -f - weist tar an, das Archiv in die Standardausgabe zu schreiben.
  • |: Leitet die Standardausgabe des tar-Befehls (das tar-Archiv) an die Standardeingabe des nächsten Befehls weiter.
  • docker exec -i my_ubuntu_container tar -xvf - -C /opt/: Führt den tar-Befehl im my_ubuntu_container aus. Das -i-Flag ist entscheidend, da es STDIN für den exec-Befehl offen hält. tar -xvf - extrahiert (-x) mit ausführlicher Ausgabe (-v) von der Standardeingabe (-f -). Die Option -C /opt/ wechselt vor der Extraktion in das /opt/-Verzeichnis.

Um zu überprüfen, ob die Dateien erfolgreich gestreamt und extrahiert wurden, listen Sie den Inhalt des /opt/my_files/-Verzeichnisses im Container auf.

docker exec my_ubuntu_container ls /opt/my_files/

In der Ausgabe sollten file1.txt und file2.txt erscheinen, was die erfolgreiche Übertragung bestätigt.

Abschließend bereinigen wir den Container und die lokalen Dateien.

docker stop my_ubuntu_container
docker rm my_ubuntu_container
rm -rf ~/project/my_files

Zusammenfassung

In diesem Lab haben Sie gelernt, wie Sie den Befehl docker container cp verwenden, um Dateien zwischen Ihrem lokalen Dateisystem und einem laufenden Docker-Container zu kopieren. Sie haben praktisch geübt, eine lokale Datei in einen Container zu kopieren, was demonstriert, wie notwendige Daten oder Konfigurationen nach dem Start eines Containers hinzugefügt werden können. Dazu gehörte das Erstellen einer lokalen Datei, das Herunterladen und Starten eines einfachen Ubuntu-Containers sowie die Verwendung von docker cp, um die Datei in das /tmp-Verzeichnis des Containers zu übertragen.