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

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

Wenn Sie Dateien vom Docker-Host in Ihren Docker-Container kopieren müssen, ist dieses Tutorial genau das Richtige für Sie.

In diesem Tutorial erfahren Sie, wie Sie Dateien mit verschiedenen Ansätzen vom Docker-Host in einen Docker-Container kopieren.

Fangen wir an!

Voraussetzungen

Wenn Sie Schritt für Schritt folgen möchten, stellen Sie sicher, dass Sie Folgendes haben:

  • Ein Linux-Host. Dieses Tutorial verwendet Ubuntu 18.04.5 LTS.
  • Docker auf dem Linux-Host installiert. Dieses Tutorial verwendet Docker v19.03.11. Sie können Ihre Docker-Version bestätigen, indem Sie docker version ausführen .
  • Jedes 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 mit diesem Tutorial zu beginnen, lernen Sie, Dateien vom Docker-Host mithilfe von docker cp in die Container zu kopieren Befehl. Der docker cp Der Befehl kopiert Dateien oder Ordner zwischen einem Container und dem lokalen Dateisystem Ihres Docker-Hosts und umgekehrt.

Lassen Sie uns anhand eines Beispiels lernen, wie man den Docker-Befehl cp verwendet.

1. Öffnen Sie ein Terminal auf Ihrem lokalen Rechner.

2. Erstellen Sie eine Datei namens myfile.txt mit touch Befehl. Die myfile.txt wird vom Docker-Host in den Container kopiert.

touch myfile.txt

3. Führen Sie den docker run aus Befehl. Der folgende Docker-Lauf erstellt im Hintergrund einen neuen Container. Der folgende Befehl enthält drei unten beschriebene Parameter:

  • d Flag, das den Container im Hintergrund ausführt und ihn am Leben erhält, bis er gelöscht wird.
  • p flag veröffentlicht den Port 80 eines Containers an den Host auf Port 80 .
  • nginx wird das Image sein, das zum Ausführen des Containers verwendet wird.
sudo docker run -d -p 80:80 nginx

4. Überprüfen Sie mit docker ps, ob der Docker-Container erfolgreich erstellt wurde Befehl. Nachdem Sie docker ps ausgeführt haben Befehl, sollten Sie einen neuen Wert sehen, der unter dem Attribut CONTAINER ID generiert wurde (im folgenden Fall ccae4670f030 ) Verwenden Sie das NGINX-Image, das bestätigt, dass der Container erfolgreich erstellt wurde.

sudo docker ps

Bevor Sie den Docker cp-Befehl ausführen, lautet die Syntax des Docker cp-Befehls:

  • CONTAINER: SRC_PATH gibt den Quellpfad des Containers an.
  • DEST_PATH ist der Zielpfad auf dem Host.
  • CONTAINER: DEST_PATH ist der Zielpfad auf dem Container.

Zusätzlich können Sie auch die options hinzufügen mit den folgenden Parametern im Befehl wie folgt:

  • Using archive or a – Kopiert alle Benutzer- und primären Gruppenberechtigungen der Dateien und Ordner.
  • Using L – Wenn Sie die L-Option angeben, können alle symbolischen Links im Quellpfad in den Zielpfad kopiert werden.
# Syntax to Copy from Container to Docker Host  
docker cp {options} CONTAINER:SRC_PATH DEST_PATH 
# Syntax to Copy from Docker Host to Container  
docker cp {options} SRC_PATH CONTAINER:DEST_PATH 

5. Als nächstes führen Sie docker cp aus Befehl. Der docker cp Der Befehl kopiert die myfile.txt die Sie zuvor erstellt haben, in die Container /usr/share Verzeichnis. ccae4670f030 ist die Container-ID, zu der die myfile.txt gehört wird kopiert.

sudo docker cp myfile.txt ccae4670f030:/usr/share

6. Stellen Sie schließlich eine SSH-Verbindung zum laufenden Container her, indem Sie docker exec ausführen Befehl mit /bin/bash , die als Standard-Shell für die Benutzeranmeldung des Linux-Systems verwendet wird.

  • Das i Flag, das angibt, dass Sie eine interaktive SSH-Sitzung mit dem Container öffnen möchten. Das i Flag schließt die SSH-Sitzung nicht, selbst wenn der Container nicht angehängt ist.
  • Das t Flag weist ein Pseudo-TTY zu, das häufig verwendet wird, um Befehle interaktiv auszuführen.sudo docker exec -it ccae4670f030 /bin/bash
sudo docker exec -it ccae4670f030 /bin/bash

Unten sehen Sie, dass Sie jetzt mit der Shell des Containers verbunden sind, wenn Sie docker exec ausführen .

7. Nachdem Sie sich beim Container angemeldet haben, überprüfen Sie, ob myfile.txt wurde mit dem Befehl ls in den Container kopiert.

  • ls ist ein Befehl zum Auflisten von Computerdateien in Unix und Unix-ähnlichen Betriebssystemen.
  • grep sucht nach allen Dateien oder Ordnern, beginnend mit der Zeichenfolge my innerhalb von usr/share Verzeichnis.

Kopieren von Dateien mit DockerFile

Im vorherigen Abschnitt haben Sie gelernt, wie Sie die Dateien in den Container kopieren, indem Sie den Docker-Befehl cp ausführen. 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 mithilfe von Dockerfile mit COPY in Container zu kopieren Befehle?

Durch das Bereitstellen eines Containers und das Kopieren der Dateien/Ordner mit Dockerfile können Sie die manuellen Kopierschritte 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 Bild zusammenzustellen.

Lassen Sie uns ein Dockerfile erstellen, einen Container daraus ausführen und schließlich die Dateien kopieren.

1. Erstellen Sie einen Ordner namens ~/host-to-container-copy-demo, dann ändern (cd ) das Arbeitsverzeichnis in diesen Ordner. Dieser Ordner enthält alle Dateien, die Sie in dieser Demo erstellen werden.

mkdir ~/host-to-container-copy-demo
cd ~/host-to-container-copy-demo

2. Erstellen Sie nun zwei Textdateien namens myfile1.tx t und meinedatei2.txt , kopieren Sie sie, fügen Sie sie in die Dateien ein und speichern Sie sie unter ~/host-to-container-copy-demo Verzeichnis.

# myfile1.txt
Hello This is my first file !
This is file will be copied in /usr/share directory from Docker host to Docker Container.
# myfile2.txt
Hello This is my second file !
This is file will be copied in /tmp directory from Docker host to Docker Container.

3. Erstellen Sie eine weitere Datei, kopieren/fügen Sie die folgende Konfiguration ein und speichern Sie die Datei als Dockerfile innerhalb der ~/host-to-container-copy-demo Verzeichnis. Wenn dies abgeschlossen ist, verwendet Docker diese Docker-Datei, um alle Befehle auszuführen, die zum Erstellen eines neuen Docker-Images über einem beliebigen Basis-Image erforderlich sind.

Die DockerFile Unten finden Sie verschiedene Schritte/Anweisungen zum Erstellen des neuen Containers:

  • FROM Die FROM-Anweisung initialisiert eine neue Build-Stufe und setzt das Basis-Image für nachfolgende Anweisungen.
  • COPY Der Befehl COPY kopiert eine Datei vom Hostcomputer (Docker-Host) in den Container.
# Instruction for Dockerfile to create a new image on top of the base image (ubuntu)
# Using the base image ubuntu: latest
FROM ubuntu:latest
# Copying myfile1.txt to the containers /usr/share directory
COPY myfile1.txt /usr/share
# Copying myfile2.txt to the containers /tmp directory
COPY myfile2.txt /tmp

4. Überprüfen Sie alle erforderlichen Dateien, um das neue Image zu erstellen, indem Sie den tree ausführen Befehl. Sie sollten Dockerfile, myfile1.txt und myfile2.txt sehen unter ~/host-to-container-copy-demo Verzeichnis.

5. Erstellen Sie als Nächstes das Image, indem Sie docker build ausführen Befehl. Das t Flag wird verwendet, um das Image updated_ubuntu_image zu markieren mit dem latest und. ermöglicht Docker, alle erforderlichen Dateien aus dem aktuellen Arbeitsverzeichnis auszuwählen.

sudo docker build -t updated_ubuntu_image:latest .

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

sudo docker images

7. Führen Sie schließlich den Docker-Container mit dem neu erstellten Image aus, indem Sie docker run ausführen Befehl. Das -it flag weist Docker an, ein Pseudo-Terminal zuzuweisen, das mit der stdin des Containers verbunden ist. bash stellt die Standard-Shell für die Benutzeranmeldung des Linux-Systems bereit.

sudo docker run -it updated_ubuntu_image bash

Unten sehen Sie, dass Sie sich jetzt in der Bash-Shell des Docker-Containers befinden.

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

Mounten eines Speichervolumes und Zugreifen auf Dateien mit dem Docker Volume Befehl

Bisher haben Sie das Kopieren von Dateien vom Host zum Container mit zwei verschiedenen Ansätzen gelernt, indem Sie den docker cp verwenden Befehl und ein DockerFile . Lassen Sie uns dieses Mal lernen, wie Sie Dateisysteme mithilfe des docker volume einfach zwischen Host und Containern freigeben können Befehl.

Angenommen, Sie sind noch am Terminal angemeldet:

1. Erstellen Sie ein Volume auf dem Docker-Host, indem Sie docker volume create ausführen Befehl. Der folgende Befehl erstellt ein Volume mit dem Namen my-vol . sudo docker volume create my-vol

sudo docker volume create my-vol

2. Überprüfen Sie, ob das Volume erfolgreich erstellt wurde, indem Sie docker volume ls ausführen Befehl. Der Befehl docker volume ls listet das Volume auf. Nach dem Ausführen von docker volume ls Befehl, sehen Sie my-vol im VOLUME NAME-Attribut, das bestätigt, dass das Volume erfolgreich erstellt wurde.

sudo docker volume ls

3. Als nächstes führen Sie den Container mit docker run aus Befehl.

  • Der Container namens volume_testing verwendet den nginx: latest Bild.
  • d flag führt den Container im Hintergrund aus und hält ihn am Leben, bis er gelöscht wird.
  • v flag mountet das Volume my-vol erstellt auf dem Docker-Host zum Ziel /app des Containers Verzeichnis.
sudo docker run -d --name volume_testing -v my-vol:/app nginx:latest

4. Überprüfen Sie mithilfe von docker inspect, ob das zuvor erstellte Volume my-vol korrekt mit dem Container gemountet ist Befehl. Der Docker-Inspect-Befehl stellt die Informationen des Containers bereit. Nach dem Ausführen von docker inspect Befehl werden alle Details des angegebenen Containers angezeigt (volume_testing ) Details, einschließlich der Mount-Details, wie unten gezeigt.

sudo docker inspect volume_testing

Unten bestätigt der Image-Snapshot, dass das Volume (my-vol ), die Sie auf dem Host erstellt haben, erfolgreich mit /app des Containers gemountet wurde Verzeichnis.

Schlussfolgerung

In diesem Tutorial haben Sie verschiedene Methoden zum Kopieren von Dateien oder Ordnern vom Docker-Host in Container kennengelernt, z. B. die Verwendung des Docker-cp-Befehls, der Docker-Volume-Befehle und von Dockerfile.

Welchen Ansatz werden Sie also als Nächstes verwenden, wenn Sie Daten vom Host in Docker-Container kopieren?


Docker
  1. So installieren Sie WordPress mit Docker auf Ubuntu

  2. So installieren Sie Jenkins mit Docker

  3. So stellen Sie einen Nginx-Container mit Docker auf Linode bereit

  4. So weisen Sie einem Docker-Container eine statische IP zu

  5. So installieren Sie Nextcloud mit Docker auf Ihrem Linux-Server

So indizieren Sie die Abhängigkeiten Ihres Docker-Images mit Syft

So führen Sie Grafana in einem Docker-Container aus

Verbessern Sie Ihr DevOps-Spiel mit diesen Beispielen für Docker-Ausführungen

So erstellen Sie ein Docker-Windows-Image mit Docker-Build-Tag

So kopieren Sie Dateien zwischen Host und Docker-Container

So greifen Sie auf Dateien außerhalb eines Docker-Containers zu