Hoe bestanden kopiëren met Docker cp naar je Docker-container

Als u bestanden moet kopiëren van de Docker-host naar uw Docker-container, is deze tutorial iets voor u.

In deze tutorial leert u hoe u bestanden van de Docker-host naar een Docker-container kopieert met behulp van verschillende methoden.

Laten we eraan beginnen!

Vereisten

Als u stap voor stap wilt volgen, zorg er dan voor dat u het volgende heeft:

  • Docker geïnstalleerd op de Linux-host. Deze tutorial maakt gebruik van Docker v19.03.11. U kunt uw Docker-versie bevestigen door docker version uit te voeren.

Bestanden kopiëren met het docker cp commando

Om deze tutorial te starten, leert u hoe u bestanden van de Docker-host naar de containers kopieert met behulp van het docker cp commando. Het docker cp commando kopieert bestanden of mappen tussen een container en het lokale bestandssysteem van uw Docker-host en vice versa.

Laten we leren hoe we het Docker cp-commando moeten gebruiken aan de hand van een voorbeeld.

1. Open een terminal op je lokale machine.

2. Maak een bestand met de naam myfile.txt met behulp van het touch-commando. Het bestand myfile.txt zal worden gekopieerd vanaf de Docker-host naar de container.

touch myfile.txt

3. Voer het docker run-commando uit. Het onderstaande docker run-commando zal een nieuwe container op de achtergrond maken. Het onderstaande commando bevat drie parameters zoals hieronder beschreven:

  • d flag that runs the container in the background and keeps it alive until deleted.
  • p flag publishes a container’s port 80 to the host on port 80.
  • nginx zal de afbeelding zijn die wordt gebruikt om de container uit te voeren.
sudo docker run -d -p 80:80 nginx
Executing the Docker run command

4. Controleer of de Docker-container succesvol is gemaakt met het docker ps-commando. Nadat je het docker ps-commando hebt uitgevoerd, zou je een nieuwe waarde moeten zien gegenereerd onder het attribuut CONTAINER ID (in dit geval ccae4670f030) met de NGINX-afbeelding die bevestigt dat de container succesvol is gemaakt.

sudo docker ps
Verifying the docker container by running the docker ps command

Voordat je het Docker cp-commando uitvoert, is de syntaxis van het Docker cp-commando als volgt:

  • CONTAINER: SRC_PATH geeft het bronpad van de container aan.
  • DEST_PATH is het bestemmingspad op de host.
  • CONTAINER: DEST_PATH is het bestemmingspad op de container.

Bovendien kun je ook de opties toevoegen met de onderstaande parameters in het commando zoals hieronder weergegeven:

  • Gebruik archive of a – Kopieert alle gebruikers- en primaire groepsrechten van de bestanden en mappen.
  • Gebruik L – Het specificeren van de L-optie staat toe dat elke symbolische koppeling in het bronpad naar het doelpad wordt gekopieerd.
# Syntax om van container naar Docker-host te kopiëren 
docker cp {options} CONTAINER:SRC_PATH DEST_PATH 
# Syntax om van Docker-host naar container te kopiëren 
docker cp {options} SRC_PATH CONTAINER:DEST_PATH 

5. Voer vervolgens het docker cp-commando uit. Het docker cp-commando zal het myfile.txt dat je eerder hebt gemaakt, kopiëren naar de map /usr/share van de container. ccae4670f030 is de container-ID waarnaar het myfile.txt zal worden gekopieerd.

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

6. SSH tenslotte naar de draaiende container door het docker exec-commando uit te voeren met /bin/bash, dat wordt gebruikt als de standaard shell voor gebruikersaanmelding van het Linux-systeem.

  • De i-vlag geeft aan dat je een interactieve SSH-sessie wilt openen naar de container. De i-vlag sluit de SSH-sessie niet af, zelfs als de container niet is gekoppeld.
  • De t-vlag wijst een pseudo-TTY toe die moet worden gebruikt om opdrachten interactief uit te voeren.sudo docker exec -it ccae4670f030 /bin/bash
sudo docker exec -it ccae4670f030 /bin/bash

Je ziet hieronder dat je nu verbonden bent met de shell van de container wanneer je docker exec uitvoert.

SSH into the running container using docker exec command

7. Na het inloggen op de container, controleer of myfile.txt is gekopieerd naar de container met behulp van het ls-commando.

  • ls is een commando om computerbestanden op te lijsten in Unix en Unix-achtige besturingssystemen.
  • grep zal zoeken naar alle bestanden of mappen die beginnen met de tekenreeks my binnen de usr/share-directory.
Verifying the files in the container

Bestanden kopiëren met behulp van Dockerfile

In de vorige sectie leerde je hoe je de bestanden in de container kunt kopiëren door het Docker cp-commando uit te voeren. Wat als je meerdere bestanden in één keer moet kopiëren? Zeker, het uitvoeren van meerdere commando’s wordt dan omslachtig! Om het uitvoeren van meerdere cp-commando’s op te lossen, waarom probeer je bestanden of mappen niet te kopiëren naar containers met behulp van Dockerfile met COPY-commando’s?

Het implementeren van een container en het kopiëren van de bestanden/mappen met behulp van Dockerfile stelt je in staat om de handmatige kopieerstappen te verwijderen die je in de vorige sectie hebt gedaan. Een Dockerfile is een tekstbestand dat alle commando’s bevat die een gebruiker via de opdrachtregel kan aanroepen om een image samen te stellen.

Laten we een Dockerfile maken, een container ervan uitvoeren en ten slotte de bestanden kopiëren.

1. Maak een map met de naam ~/host-to-container-copy-demo, wijzig vervolgens (cd) de werkmap naar die map. Deze map bevat alle bestanden die je in deze demo gaat maken.

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

2. Maak nu twee tekstbestanden met de namen myfile1.txt en myfile2.txt, kopieer en plak ze in de bestanden, en sla ze op in de ~/host-to-container-copy-demo-map.

# 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. Maak een ander bestand aan, kopieer/plak de onderstaande configuratie en sla het bestand op als Dockerfile binnen de ~/host-to-container-copy-demo-directory. Wanneer voltooid, zal Docker dit DockerFile gebruiken om alle benodigde commando’s uit te voeren om een nieuwe Docker-image boven op een basismage te bouwen.

De DockerFile hieronder bevat verschillende stappen/instructies die de nieuwe container zullen bouwen:

  • FROM De instructie FROM initialiseert een nieuwe bouwfase en stelt de basismage in voor daaropvolgende instructies.
  • COPY Het COPY-commando kopieert een bestand van de hostmachine (Docker-host) naar de container.
# Instructie voor Dockerfile om een nieuwe image boven op de basismage (ubuntu) te maken
# Gebruik van de basismage ubuntu: latest
FROM ubuntu:latest
# Kopiëren van myfile1.txt naar de map /usr/share van de container
COPY myfile1.txt /usr/share
# Kopiëren van myfile2.txt naar de map /tmp van de container
COPY myfile2.txt /tmp

4. Controleer alle vereiste bestanden om het nieuwe image te bouwen door het tree-commando uit te voeren. Je zou Dockerfile, myfile1.txt en myfile2.txt moeten zien onder de ~/host-to-container-copy-demo-directory.

Verifies files and folders using tree command

5. Bouw vervolgens het image door het docker build-commando uit te voeren. De t-vlag wordt gebruikt om het image updated_ubuntu_image te taggen met latest en . stelt Docker in staat om alle benodigde bestanden te selecteren vanuit de huidige werkdirectory.

sudo docker build -t updated_ubuntu_image:latest .
Building the Docker image by running the docker build command

6. Controleer nu het nieuw gebouwde image updated_ubuntu_image door het docker images-commando uit te voeren. Let op de REPOSITORY-attribuut. Dit attribuut is de tag die is aangemaakt met de -t-vlag in de vorige stap.

sudo docker images
Repository Attribute

7. Voer tot slot de Docker-container uit met het nieuw gebouwde image door het docker run-commando uit te voeren. De -it-vlag instrueert Docker om een pseudo-terminal toe te wijzen die is verbonden met de standaardinvoer van de container. bash biedt de standaardshell voor gebruikersaanmelding van het Linux-systeem.

sudo docker run -it updated_ubuntu_image bash

Je zult hieronder zien dat je nu in de Bash-shell van de Docker-container bent.

Running the container using docker run command.

8. Controleer vervolgens of bestanden succesvol zijn gekopieerd naar de container in de mappen /tmp en /usr/share door het ls-commando uit te voeren.

Verifying the files if they are successfully copied on the container

Monteren van een Opslagvolume en Toegang tot Bestanden met het Docker Volume-commando

Tot nu toe heb je geleerd hoe je bestanden van host naar container kunt kopiëren met behulp van twee verschillende benaderingen door gebruik te maken van het docker cp-commando en een DockerFile. Deze keer, laten we leren hoe je eenvoudig bestandssystemen kunt delen tussen host en containers door gebruik te maken van het docker volume-commando.

Als je nog steeds bent ingelogd op de terminal:

1. Maak een volume aan op de Docker host door het docker volume create-commando uit te voeren. Het onderstaande commando zal een volume genaamd my-vol creëren. sudo docker volume create my-vol

sudo docker volume create my-vol

2. Verifieer dat het volume succesvol is aangemaakt door het docker volume ls-commando uit te voeren. Het docker volume ls-commando toont het volume. Na het uitvoeren van het docker volume ls-commando, zie je my-vol in het VOLUME NAME attribuut dat bevestigt dat het volume succesvol is aangemaakt.

sudo docker volume ls
Listing the docker volumes

3. Voer vervolgens de container uit met behulp van het docker run-commando.

  • De container met de naam volume_testing maakt gebruik van de nginx: latest-image.
  • d flag runs the container in the background and keeps it alive until deleted.
  • v flag mounts the volume my-vol created on Docker host to the container’s destination /app directory.
sudo docker run -d --name volume_testing -v my-vol:/app nginx:latest
Running the Docker command and attaching the volume with the container

4. Controleer of het volume my-vol dat je eerder hebt aangemaakt, correct is gekoppeld aan de container met behulp van het docker inspect-commando. Het Docker inspect-commando geeft informatie over de container. Na het uitvoeren van het docker inspect-commando, worden alle details van de gespecificeerde container (volume_testing) weergegeven, inclusief de montagegegevens, zoals hieronder getoond.

sudo docker inspect volume_testing

Onderstaande afbeelding bevestigt dat het volume (my-vol) dat je op de host hebt aangemaakt, succesvol is gekoppeld aan de /app-directory van de container.

Verifying the volumes in the container

Conclusie

In deze handleiding heb je verschillende manieren geleerd om bestanden of mappen van de Docker-host naar containers te kopiëren, zoals het gebruik van Docker cp-commando, Docker volume-commando’s en Dockerfile.

Welke aanpak ga je nu gebruiken bij het kopiëren van gegevens van de host naar Docker-containers?

Source:
https://adamtheautomator.com/docker-cp/