Dateien vom Host in den Docker-Container kopieren
-
Verwenden Sie
docker cp
, um Dateien vom Host in den Docker-Container zu kopieren -
Verwenden Sie
docker volume
, um Dateien vom Host in den Docker-Container zu kopieren
In diesem Artikel werden die Methoden erläutert und demonstriert, mit denen wir Dateien von unserem Hostcomputer in einen laufenden Container in Docker übertragen können.
Verwenden Sie docker cp
, um Dateien vom Host in den Docker-Container zu kopieren
Der Befehl docker cp
ist eine der einfachsten Möglichkeiten, Dateien und Verzeichnisse von unserem Host-Computer in einen Docker-Container zu kopieren. Wir werden Ubuntu 20.4.5 und die zu diesem Zeitpunkt neueste Version von Docker verwenden, nämlich v 19.03.
Syntax:
docker cp {options} PATH_HOST CONTAINER:PATH_TO_CONTAINER
Woher:
PATH_HOST
gibt den Quellpfad an, wo sich die zu kopierende Datei auf dem Host befindet.PATH_TO_CONTAINER
ist der Zielpfad, in dem wir die Datei im Container speichern möchten.
Beispiel:
Wir beginnen mit der Erstellung unseres Zielcontainers. Wir verwenden das offizielle Nginx-Image für diesen Artikel, das wir über den Docker-Desktop oder das Terminal abrufen können, indem wir den folgenden Befehl ausführen.
$ docker pull nginx
Ausgabe:
Using default tag: latest
latest: Pulling from library/nginx
5eb5b503b376: Pull complete
1ae07ab881bd: Pull complete
78091884b7be: Pull complete
091c283c6a66: Pull complete
55de5851019b: Pull complete
b559bad762be: Pull complete
Digest: sha256:2834dc507516af02784808c5f48b7cbe38b8ed5d0f4837f16e78d00deb7e7767
Status: Downloaded newer image for nginx:latest
docker.io/library/nginx:latest
Wir verwenden den folgenden Befehl, um zu überprüfen, ob wir das Image erfolgreich aus der Registrierung gezogen haben.
$ docker images
Ausgabe:
REPOSITORY TAG IMAGE ID CREATED SIZE
nginx latest c316d5a335a5 2 weeks ago 142MB
Wir können jetzt einen Container erstellen. Mit dem Befehl run erstellen wir einen Container und stellen ihn im getrennten Modus bereit, um den externen Port 8080 und den internen Port 80 abzuhören.
Der folgende Befehl erstellt einen Container mit dem Nginx-Basisimage.
$ docker run -d -p 8080:80 nginx
Wir können überprüfen, ob wir erfolgreich einen neuen Container erstellt haben, indem wir den Befehl docker ps -a
ausführen. Dies listet alle Container auf, die wir kürzlich und in der Vergangenheit erstellt haben, zusammen mit ihren Container-IDs und den entsprechenden Bildern.
Wir können dies wie hier gezeigt ausführen.
docker ps -a
Ausgabe:
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
0c57de10362b nginx "/docker-entrypoint.…" About a minute ago Up About a minute 0.0.0.0:8080->80/tcp lucid_booth
Bevor wir den Befehl docker cp
verwenden, müssen wir eine Datei erstellen, die wir vom Host in den gerade erstellten Container kopieren.
Wir erstellen eine Datei mit dem Namen new_file.txt
und speichern sie mit dem Befehl touch
im Home-Verzeichnis.
Hier ist der Befehl dazu.
$ touch new_file.txt
Wir können das Verzeichnis anzeigen, um sicherzustellen, dass wir die Datei erfolgreich erstellt haben, indem wir den Befehl ls
verwenden, wie hier gezeigt.
isaac@DESKTOP-HV44HT6:~$ ls
new_file.txt
new_file.txt
ist natürlich eine leere Datei; Wir möchten uns jedoch darauf konzentrieren, den Befehl docker cp
zu verwenden, um ihn vom Host in den Container zu verschieben, den wir zuvor erstellt haben.
Diese Datei kopieren wir dann in den von uns erstellten Container.
$ docker cp new_file.txt 0c57de10362b:/usr/share
Einfach so haben wir new_file.txt
in den Container mit der ID 0c57de10362b unter den Ordner /usr/share
kopiert.
Wir können dies feststellen, indem wir über eine interaktive SSH-Sitzung mit dem Befehl docker exec
und dem Flag -it
in den laufenden Container gelangen, um Befehle interaktiv auszuführen.
$ docker exec -it 0c57de10362b /bin/bash
Nachdem wir uns beim Container angemeldet haben, möchten wir Dateien auflisten, um zu überprüfen, ob wir diese Datei in diesen Container kopiert haben. Wir können den Befehl ls
erneut verwenden, aber den Ordner angeben, auf den wir zugreifen möchten.
root@0c57de10362b:/# ls -lh /usr/share/
Ausgabe:
In ähnlicher Weise können wir auch ein Verzeichnis kopieren, das viele Dateien enthält, indem wir einfach den Speicherort der Dateien ändern, die aus dem Verzeichnis gelesen werden sollen, wie unten gezeigt.
$ docker cp src/directory/. container-id:/target_location/directory
Der Befehl docker cp
ist zwar einfach zu verwenden, weist jedoch einige Einschränkungen auf. Seine Syntax unterscheidet sich vom Unix-Befehl cp
und unterstützt nur eine begrenzte Anzahl von Tags.
Außerdem kann dies nur zum Kopieren von Dateien vom Host in einen Container und nicht zwischen Containern verwendet werden.
Verwenden Sie docker volume
, um Dateien vom Host in den Docker-Container zu kopieren
Ein besserer Ansatz zum Kopieren von Dateien zwischen Containern ist das docker volume
.
Wir können Volumes anhängen, die Dateien enthalten, die wir während des Containererstellungsprozesses in einen Container kopieren möchten, indem wir eines der beiden Flags -v
oder -mount
verwenden.
Um Volumes in Docker zu verwenden, erstellen wir zunächst eines mit dem Befehl docker volume
, wie unten gezeigt.
$ docker volume create volume_one
Mit docker volume ls
können wir überprüfen, ob wir das Volume erfolgreich erstellt haben. Dies listet die Namen der Volumes auf, die jetzt und in der Vergangenheit erstellt wurden, sowie den Namen des Treibers.
isaac@DESKTOP-HV44HT6:~$ docker volume ls
DRIVER VOLUME NAME
local volume_one
Nachdem wir nun ein Volume erstellt haben, besteht der nächste Schritt darin, einen neuen Container mit dem Befehl run
zu erstellen und das erstellte Volume mit dem Flag -v
anzuhängen.
Das Flag -v
ermöglicht es uns, das neue Volume an den von uns erstellten Container anzuhängen. Wir werden diesen Container mit der neuesten Version des Nginx-Basisimages erstellen.
$ docker run -d -v volume_one:/app nginx:latest
f2457d3eb8fe14645b9e3938017c02c46a657c9ad3323ff4c03924d2fddd7046
Mit dem Befehl Docker inspect können wir Low-Level-Informationen zu Docker-Objekten zurückgeben. Wir werden untersuchen, ob unser Volume erfolgreich an den von uns erstellten Container angehängt wurde.
Da wir diesem Container keinen Namen gegeben haben, verwenden wir die Container-ID, um ihn zu inspizieren. Wir verwenden die neueste Container-ID und nicht die frühere.
$ docker ps -a
Ausgabe:
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
f2457d3eb8fe nginx:latest "/docker-entrypoint.…" 4 minutes ago Up 4 minutes 80/tcp brave_kirch
0c57de10362b nginx "/docker-entrypoint.…" About an hour ago Up About an hour 0.0.0.0:8080->80/tcp lucid_booth
Wir können nun diese Container-ID verwenden, um den Container zu inspizieren.
$ docker inspect f2457d3eb8fe
Ausgabe:
Einer der Vorteile des Befehls docker volume
ist das Erstellen eines einzelnen Verzeichnisses, das von mehreren Containern gemeinsam genutzt wird.
Isaac Tony is a professional software developer and technical writer fascinated by Tech and productivity. He helps large technical organizations communicate their message clearly through writing.
LinkedInVerwandter Artikel - Docker Container
- Der Unterschied zwischen Docker-Container und Docker-Image
- Erstellen Sie einen Container in einer Docker-Compose-Datei neu
- Führen Sie Container mit Docker kontinuierlich im Hintergrund aus
- Geben Sie einen laufenden Docker-Container mit einem neuen Pseudo-TTY ein
- Listen Sie nur die angehaltenen Container in Docker auf
- Löschen Sie Container dauerhaft in Docker