Wenn Sie Dateien vom Docker-Host auf Ihren Docker-Container kopieren müssen, ist dieses Tutorial genau richtig.
In diesem Tutorial lernen Sie, wie Sie Dateien von Docker-Host zu einem Docker-Container mithilfe verschiedener Ansätze kopieren können.
Legen wir los!
Voraussetzungen
Wenn Sie Schritt für Schritt mitmachen möchten, stellen Sie sicher, dass Sie folgendes haben:
- A Linux host. This tutorial uses Ubuntu 18.04.5 LTS.
- Docker installiert auf dem Linux-Host. Dieses Tutorial verwendet Docker v19.03.11. Sie können Ihre Docker-Version überprüfen, indem Sie
docker version
ausführen.
- Eine heruntergeladene und verfügbare Docker-Image. Dieses Tutorial verwendet das neueste NGINX Docker-Image, das auf Docker Hub verfügbar ist.
Kopieren von Dateien mit dem docker cp
Befehl
Um dieses Tutorial zu beginnen, lernen Sie, wie Sie Dateien vom Docker-Host zu den Containern mithilfe des docker cp
Befehls kopieren können. Der docker cp
Befehl kopiert Dateien oder Verzeichnisse zwischen einem Container und dem lokalen Dateisystem Ihres Docker-Hosts und umgekehrt.
Lassen Sie uns lernen, wie Sie den Docker cp-Befehl mit einem Beispiel verwenden.
1. Öffnen Sie ein Terminal auf Ihrem lokalen Computer.
2. Erstellen Sie eine Datei mit dem Namen myfile.txt mit dem Befehl touch
. Die Datei myfile.txt wird vom Docker-Host in den Container kopiert.
3. Führen Sie den Befehl docker run
aus. Der unten stehende docker run erstellt einen neuen Container im Hintergrund. Der Befehl enthält drei unten beschriebene Parameter:
d
flag that runs the container in the background and keeps it alive until deleted.p
flag publishes a container’s port80
to the host on port80
.nginx
wird das Bild sein, das zum Ausführen des Containers verwendet wird.

4. Überprüfen Sie, ob der Docker-Container erfolgreich erstellt wurde, indem Sie den Befehl docker ps
ausführen. Nach Ausführung des Befehls docker ps
sollten Sie einen neuen Wert unter dem Attribut CONTAINER ID (in diesem Fall ccae4670f030
) sehen, der mit dem NGINX-Bild bestätigt, dass der Container erfolgreich erstellt wurde.

Vor Ausführung des Docker cp-Befehls lautet die Syntax des Befehls wie folgt:
CONTAINER: SRC_PATH
gibt den Quellpfad des Containers an.DEST_PATH
ist der Ziel-Pfad auf dem Host.CONTAINER: DEST_PATH
ist der Ziel-Pfad im Container.
Zusätzlich können Sie dem Befehl auch die Optionen
mit den unten stehenden Parametern hinzufügen.
- Verwenden Sie Archiv oder a – Kopiert alle Benutzer- und Primärgruppenberechtigungen der Dateien und Ordner.
- Verwendung von L – Durch Angabe der L-Option wird jedem symbolischen Link im Quellpfad ermöglicht, zum Zielortpfad kopiert zu werden.
5. Führen Sie als Nächstes den Befehl docker cp
aus. Der Befehl docker cp
kopiert die myfile.txt, die Sie zuvor erstellt haben, in das Verzeichnis /usr/share des Containers. ccae4670f030
ist die Container-ID, zu der die myfile.txt kopiert wird.
6. Melden Sie sich schließlich über SSH beim ausgeführten Container an, indem Sie den Befehl docker exec
mit /bin/bash
ausführen, der als Standardschale für die Benutzeranmeldung des Linux-Systems verwendet wird.
- Das Flag
i
gibt an, dass Sie eine interaktive SSH-Sitzung mit dem Container öffnen möchten. Das Flagi
schließt die SSH-Sitzung nicht, auch wenn der Container nicht angehängt ist. - Das Flag
t
reserviert ein Pseudo-TTY, das zum interaktiven Ausführen von Befehlen verwendet werden muss.sudo docker exec -it ccae4670f030 /bin/bash
Sie sehen unten, dass Sie jetzt mit der Shell des Containers verbunden sind, wenn Sie docker exec
ausführen.

7. Nach dem Einloggen in den Container überprüfen Sie, ob myfile.txt mithilfe des ls-Befehls in den Container kopiert wurde.
ls
ist ein Befehl zum Auflisten von Computerdateien in Unix- und Unix-ähnlichen Betriebssystemen.grep
sucht nach allen Dateien oder Ordnern, die mit dem Stringmy
im Verzeichnis usr/share beginnen.

Kopieren von Dateien mit dem Dockerfile
In dem vorherigen Abschnitt haben Sie gelernt, wie man Dateien in den Container kopiert, indem man den Docker-Befehl cp ausführt. Was ist, wenn Sie mehrere Dateien auf einmal kopieren müssen? Sicherlich wird das Ausführen mehrerer Befehle zu einem Overhead! Um das Ausführen mehrerer cp-Befehle zu lösen, warum versuchen Sie nicht, Dateien oder Ordner in Container mit Dockerfile und COPY
-Befehlen zu kopieren?
Das Bereitstellen eines Containers und das Kopieren der Dateien/Ordner mithilfe von Dockerfile ermöglicht es Ihnen, die manuellen Kopierschritte zu entfernen, die Sie im vorherigen Abschnitt durchgeführt haben. Ein Dockerfile ist ein Textdokument, das alle Befehle enthält, die ein Benutzer auf der Befehlszeile aufrufen könnte, um ein Abbild zusammenzustellen.
Erstellen wir ein Dockerfile, führen einen Container daraus aus und kopieren schließlich die Dateien.
1. Erstellen Sie einen Ordner mit dem Namen ~/host-to-container-copy-demo, und ändern Sie dann (cd
) das Arbeitsverzeichnis zu diesem Ordner. Dieser Ordner enthält alle Dateien, die Sie in dieser Demo erstellen werden.
2. Erstellen Sie nun zwei Textdateien mit den Namen myfile1.txt und myfile2.txt, kopieren Sie sie und fügen Sie sie in die Dateien ein, und speichern Sie sie im Verzeichnis ~/host-to-container-copy-demo.
3. Erstellen Sie eine weitere Datei, kopieren/einfügen Sie die untenstehende Konfiguration und speichern Sie die Datei als Dockerfile im Verzeichnis ~/host-to-container-copy-demo. Wenn Sie fertig sind, verwendet Docker diese Dockerfile, um alle erforderlichen Befehle zum Erstellen eines neuen Docker-Images auf Basis eines beliebigen Basisimages auszuführen.
Die Dockerfile unten enthält verschiedene Schritte/Anweisungen, die den neuen Container erstellen werden:
FROM
– Die Anweisung FROM initialisiert einen neuen Build-Schritt und setzt das Basissystem für nachfolgende Anweisungen fest.COPY
– Der COPY-Befehl kopiert eine Datei vom Hostrechner (Docker-Host) in den Container.
4. Überprüfen Sie alle erforderlichen Dateien zum Erstellen des neuen Images, indem Sie den Befehl tree
ausführen. Sie sollten Dockerfile, myfile1.txt und myfile2.txt im Verzeichnis ~/host-to-container-copy-demo sehen.

5. Bauen Sie das Image anschließend, indem Sie den Befehl docker build
ausführen. Der t
-Flag wird verwendet, um das Image updated_ubuntu_image
mit dem latest
zu taggen, und .
erlaubt Docker, alle erforderlichen Dateien aus dem aktuellen Arbeitsverzeichnis auszuwählen.

docker build
command 6. Überprüfen Sie nun das neu erstellte Image updated_ubuntu_image
, indem Sie den Befehl docker images
ausführen. Beachten Sie das REPOSITORY-Attribut. Dieses Attribut ist der Tag, der mit dem -t
-Flag im vorherigen Schritt erstellt wurde.

7. Führen Sie abschließend den Docker-Container mithilfe des neu erstellten Images aus, indem Sie den Befehl docker run
ausführen. Der -it
-Flag weist Docker an, ein Pseudoterminal zuzuweisen, das mit der Standardeingabe des Containers verbunden ist. bash
bietet die Standardshell für die Benutzeranmeldung des Linux-Systems.
Sie werden unten sehen, dass Sie sich jetzt in der Bash-Shell des Docker-Containers befinden.

8. Überprüfen Sie als nächstes, ob die Dateien erfolgreich in den Verzeichnissen /tmp und /usr/share auf dem Container kopiert wurden, indem Sie den Befehl ls
ausführen.

Einhängen eines Speichervolumes und Zugriff auf Dateien mit dem Docker Volume
-Befehl
Bis jetzt haben Sie gelernt, wie Sie Dateien vom Host zum Container mithilfe zweier unterschiedlicher Ansätze mit dem docker cp
-Befehl und einem DockerFile kopieren. Dieses Mal lernen wir, wie Sie Dateisysteme zwischen Host und Containern mithilfe des docker volume
-Befehls einfach freigeben.
Angenommen, Sie sind immer noch im Terminal angemeldet:
1. Erstellen Sie ein Volume auf dem Docker-Host, indem Sie den docker volume create
-Befehl ausführen. Der folgende Befehl erstellt ein Volume mit dem Namen my-vol
. sudo docker volume create my-vol
2. Überprüfen Sie, ob das Volume erfolgreich erstellt wurde, indem Sie den docker volume ls
-Befehl ausführen. Der Befehl docker volume ls listet das Volume auf. Nach Ausführung des Befehls docker volume ls
sehen Sie my-vol
im VOLUME NAME-Attribut, was bestätigt, dass das Volume erfolgreich erstellt wurde.

3. Führen Sie anschließend den Container mit dem docker run
-Befehl aus.
- Der Container mit dem Namen
volume_testing
verwendet das Imagenginx:latest
. d
flag runs the container in the background and keeps it alive until deleted.v
flag mounts the volumemy-vol
created on Docker host to the container’s destination/app
directory.

4. Überprüfen Sie, ob das zuvor erstellte Volume „my-vol“ ordnungsgemäß mit dem Container mithilfe des docker inspect
-Befehls eingebunden ist. Der Docker Inspect-Befehl liefert Informationen zum Container. Nach Ausführung des docker inspect
-Befehls werden alle Details des angegebenen Containers (volume_testing
) angezeigt, einschließlich der Einhängepunktdetails, wie unten gezeigt.
Im Bild unten wird bestätigt, dass das Volume (my-vol
), das zuvor auf dem Host erstellt wurde, erfolgreich mit dem Verzeichnis /app
des Containers eingebunden ist.

Fazit
In diesem Tutorial haben Sie verschiedene Möglichkeiten gelernt, Dateien oder Ordner vom Docker-Host in Container zu kopieren, wie die Verwendung des Docker cp-Befehls, der Docker Volume-Befehle und des Dockerfiles.
Welchen Ansatz werden Sie als nächstes verwenden, um Daten vom Host zu Docker-Containern zu kopieren?