Wie man den docker compose 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 compose cp verwenden, um Dateien und Verzeichnisse zwischen einem Service-Container und dem lokalen Dateisystem zu kopieren. Wir beginnen mit der Einrichtung eines einfachen Docker Compose-Projekts, einschließlich der Installation von Docker Compose und der Erstellung einer grundlegenden docker-compose.yml-Datei mit einem Service, der auf dem Ubuntu-Image basiert.

Nach der Projekteinrichtung üben Sie das Kopieren einer Datei vom Service-Container auf Ihren lokalen Rechner und anschließend das Kopieren einer Datei von Ihrem lokalen Rechner in den Service-Container. Abschließend lernen Sie, wie Sie ein gesamtes Verzeichnis vom Service-Container in Ihr lokales Dateisystem kopieren können, was die Flexibilität des docker compose cp-Befehls für die Datenverwaltung in Ihren Docker Compose-Umgebungen demonstriert.


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/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-555075{{"Wie man den docker compose cp Befehl zum Kopieren von Dateien verwendet"}} docker/ps -.-> lab-555075{{"Wie man den docker compose cp Befehl zum Kopieren von Dateien verwendet"}} docker/exec -.-> lab-555075{{"Wie man den docker compose cp Befehl zum Kopieren von Dateien verwendet"}} docker/pull -.-> lab-555075{{"Wie man den docker compose cp Befehl zum Kopieren von Dateien verwendet"}} docker/cp -.-> lab-555075{{"Wie man den docker compose cp Befehl zum Kopieren von Dateien verwendet"}} end

Ein einfaches Docker Compose-Projekt vorbereiten

In diesem Schritt bereiten wir ein einfaches Docker Compose-Projekt vor. Da Docker Compose in der LabEx-Umgebung nicht vorinstalliert ist, werden wir es zunächst installieren. Docker Compose ist ein Tool zum Definieren und Ausführen von Multi-Container-Docker-Anwendungen. Mit Compose verwenden Sie eine YAML-Datei, um die Services Ihrer Anwendung zu konfigurieren. Anschließend können Sie mit einem einzigen Befehl alle Services aus Ihrer Konfiguration erstellen und starten.

Zuerst installieren wir Docker Compose. Wir laden die Docker Compose-Binary herunter und machen sie ausführbar.

sudo curl -L "https://github.com/docker/compose/releases/download/v2.20.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose

Nun überprüfen wir die Installation, indem wir die Docker Compose-Version abfragen.

docker-compose --version

Sie sollten eine Ausgabe ähnlich zu Docker Compose version v2.20.2 sehen.

Als nächstes erstellen wir ein einfaches Docker Compose-Projekt. Wir legen ein Verzeichnis für unser Projekt an und erstellen darin eine docker-compose.yml-Datei. Diese Datei definiert einen einfachen Service mit dem ubuntu-Image.

mkdir ~/project/my-compose-app
cd ~/project/my-compose-app
nano docker-compose.yml

Fügen Sie im nano-Editor folgenden Inhalt in die docker-compose.yml-Datei ein:

version: "3.8"
services:
  my-service:
    image: ubuntu:latest
    command: tail -f /dev/null

Drücken Sie Strg + X, dann Y und Enter, um den Editor zu speichern und zu verlassen.

Hier die Erklärung der docker-compose.yml-Datei:

  • version: '3.8' gibt die Version des Docker Compose-Dateiformats an.
  • services: definiert die Services, aus denen Ihre Anwendung besteht.
  • my-service: ist der Name unseres Services.
  • image: ubuntu:latest spezifiziert das Docker-Image für diesen Service. Wir verwenden die neueste Version des Ubuntu-Images.
  • command: tail -f /dev/null ist der Befehl, der beim Start des Containers ausgeführt wird. Dieser Befehl hält den Container unbegrenzt am Laufen, ohne nennenswerte Ressourcen zu verbrauchen, was für Tests und Debugging nützlich ist.

Vor dem Start des Services müssen wir das ubuntu:latest-Image herunterladen.

docker pull ubuntu:latest

Nun können wir den Service mit dem Befehl docker-compose up starten. Das Flag -d führt die Container im Detached-Modus aus, d.h. sie laufen im Hintergrund.

docker-compose up -d

Sie sollten eine Ausgabe sehen, die anzeigt, dass der Service erstellt und gestartet wird.

Abschließend überprüfen wir den Status des laufenden Services mit dem Befehl docker-compose ps.

docker-compose ps

Sie sollten eine Ausgabe sehen, die zeigt, dass der my-service-Container läuft.

Eine Datei vom Service-Container in das lokale Dateisystem kopieren

In diesem Schritt lernen Sie, wie Sie eine Datei von einem laufenden Docker-Container in Ihr lokales Dateisystem kopieren. Dies ist eine häufige Aufgabe, wenn Sie Logs, Konfigurationsdateien oder andere im Container erzeugte Daten abrufen müssen.

Wir verwenden hierfür den Befehl docker cp. Dieser kopiert Dateien/Ordner zwischen einem Container und dem lokalen Dateisystem. Die Syntax lautet docker cp <container>:<src_path> <dest_path> für das Kopieren vom Container zum lokalen System und docker cp <src_path> <container>:<dest_path> für das Kopieren vom lokalen System in den Container.

Zuerst erstellen wir eine einfache Datei in unserem laufenden my-service-Container. Dazu nutzen wir den docker exec-Befehl, der einen Befehl innerhalb des Containers ausführt.

Stellen Sie sicher, dass Sie sich im Verzeichnis ~/project/my-compose-app befinden.

cd ~/project/my-compose-app
docker-compose exec my-service bash -c "echo 'This is a test file inside the container.' > /tmp/container_file.txt"

Dieser Befehl startet eine bash-Shell im my-service-Container und führt dann den echo-Befehl aus, um eine Datei namens /tmp/container_file.txt mit Testinhalt zu erstellen.

Nun kopieren wir diese Datei vom Container in unser lokales Dateisystem, und zwar in das aktuelle Verzeichnis (~/project/my-compose-app).

docker-compose cp my-service:/tmp/container_file.txt .

Der docker-compose cp-Befehl ähnelt docker cp, arbeitet aber mit den in Ihrer docker-compose.yml definierten Service-Namen. my-service ist unser Service-Name, /tmp/container_file.txt der Pfad zur Datei im Container, und . steht für das aktuelle lokale Verzeichnis.

Nach Ausführung des Befehls sollte die Datei container_file.txt in Ihrem ~/project/my-compose-app-Verzeichnis erscheinen. Wir überprüfen ihre Existenz und den Inhalt:

ls container_file.txt
cat container_file.txt

Sie sollten den Dateinamen sehen und den Inhalt "This is a test file inside the container." in der Konsole ausgegeben bekommen.

Eine Datei vom lokalen Dateisystem in einen Service-Container kopieren

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

Wir verwenden erneut den docker cp-Befehl, diesmal jedoch in umgekehrter Richtung: docker cp <src_path> <container>:<dest_path>.

Zuerst erstellen wir eine einfache Datei in unserem lokalen Dateisystem im Verzeichnis ~/project/my-compose-app.

cd ~/project/my-compose-app
echo "This file is from the local filesystem." > local_file.txt

Nun kopieren wir diese local_file.txt von unserem lokalen Dateisystem in das Verzeichnis /tmp/ des my-service-Containers.

docker-compose cp local_file.txt my-service:/tmp/

Hier wird der docker-compose cp-Befehl verwendet. local_file.txt ist der Pfad zur Datei auf unserem lokalen System, my-service der Name unseres Services und /tmp/ das Zielverzeichnis im Container.

Um zu überprüfen, ob die Datei erfolgreich kopiert wurde, führen wir einen Befehl im Container aus, der die Datei anzeigt.

docker-compose exec my-service cat /tmp/local_file.txt

Dieser Befehl führt cat /tmp/local_file.txt im my-service-Container aus. Sie sollten den Inhalt "This file is from the local filesystem." in Ihrer Konsole sehen, was bestätigt, dass die Datei korrekt kopiert wurde.

Ein Verzeichnis vom Service-Container in das lokale Dateisystem kopieren

In diesem Schritt lernen Sie, wie Sie ein komplettes Verzeichnis von einem laufenden Docker-Container in Ihr lokales Dateisystem kopieren. Dies ist nützlich, um beispielsweise Anwendungsausgabeverzeichnisse, Log-Verzeichnisse oder andere im Container erzeugte Verzeichnisstrukturen abzurufen.

Wir verwenden erneut den docker cp-Befehl, ähnlich wie beim Kopieren einer Datei, aber mit Angabe eines Verzeichnispfads.

Zuerst erstellen wir ein Verzeichnis mit einigen Dateien in unserem laufenden my-service-Container. Dazu nutzen wir docker-compose exec, um Befehle im Container auszuführen.

Stellen Sie sicher, dass Sie sich im Verzeichnis ~/project/my-compose-app befinden.

cd ~/project/my-compose-app
docker-compose exec my-service bash -c "mkdir /tmp/container_dir && echo 'File 1' > /tmp/container_dir/file1.txt && echo 'File 2' > /tmp/container_dir/file2.txt"

Dieser Befehl erstellt ein Verzeichnis namens /tmp/container_dir im my-service-Container und legt darin zwei Dateien (file1.txt und file2.txt) an.

Nun kopieren wir das gesamte Verzeichnis vom Container in unser lokales Dateisystem, und zwar in das aktuelle Verzeichnis (~/project/my-compose-app).

docker-compose cp my-service:/tmp/container_dir .

Hier wird der docker-compose cp-Befehl verwendet. my-service ist unser Service-Name, /tmp/container_dir der Pfad zum Verzeichnis im Container, und . steht für das aktuelle lokale Verzeichnis.

Nach Ausführung des Befehls sollte ein neues Verzeichnis container_dir in Ihrem ~/project/my-compose-app-Verzeichnis erscheinen. Wir überprüfen seine Existenz und listen den Inhalt auf:

ls container_dir
ls container_dir/file1.txt container_dir/file2.txt

Sie sollten das container_dir-Verzeichnis sehen sowie die beiden darin enthaltenen Dateien (file1.txt und file2.txt).

Abschließend räumen wir die Docker Compose-Services auf:

docker-compose down

Dieser Befehl stoppt und entfernt die Container, Netzwerke und Volumes, die durch docker-compose up erstellt wurden.

Zusammenfassung

In diesem Lab haben wir gelernt, wie man den docker compose cp-Befehl verwendet, um Dateien und Verzeichnisse zwischen einem Service-Container und dem lokalen Dateisystem zu kopieren. Wir begannen mit der Vorbereitung eines einfachen Docker Compose-Projekts, das die Installation von Docker Compose und die Erstellung einer docker-compose.yml-Datei umfasste, die einen grundlegenden Service mit dem Ubuntu-Image definiert.

Nach dem Projektaufbau haben wir praktisch geübt:

  • Eine Datei vom Service-Container in das lokale Dateisystem zu kopieren
  • Eine Datei vom lokalen Dateisystem in den Service-Container zu kopieren
  • Schließlich ein komplettes Verzeichnis vom Service-Container in das lokale Dateisystem zu kopieren

Diese Schritte demonstrierten die praktische Anwendung des docker compose cp-Befehls für das Datenmanagement in einer Docker Compose-Umgebung.