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:
- A Linux host. This tutorial uses Ubuntu 18.04.5 LTS.
- 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.
- Elke gedownloade en beschikbare Docker-image. Deze tutorial maakt gebruik van de nieuwste NGINX Docker-image die beschikbaar is op Docker Hub.
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.
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 port80
to the host on port80
.nginx
zal de afbeelding zijn die wordt gebruikt om de container uit te voeren.

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.

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.
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.
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. Dei
-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
Je ziet hieronder dat je nu verbonden bent met de shell van de container wanneer je docker exec
uitvoert.

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 tekenreeksmy
binnen de usr/share-directory.

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.
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.
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.
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.

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.

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.

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.
Je zult hieronder zien dat je nu in de Bash-shell van de Docker-container bent.

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.

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
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.

3. Voer vervolgens de container uit met behulp van het docker run
-commando.
- De container met de naam
volume_testing
maakt gebruik van denginx: latest
-image. 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. 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.
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.

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?