Se hai bisogno di copiare file dall’host Docker al tuo container Docker, questo tutorial fa al caso tuo.
In questo tutorial imparerai a copiare file dall’host Docker a un container Docker utilizzando vari approcci.
Cominciamo!
Prerequisiti
Se vuoi seguire passo dopo passo, assicurati di avere quanto segue:
- A Linux host. This tutorial uses Ubuntu 18.04.5 LTS.
- Docker installato sull’host Linux. Questo tutorial utilizza Docker v19.03.11. Puoi confermare la tua versione di Docker eseguendo
docker version
.
- Qualsiasi immagine Docker scaricata e disponibile. Questo tutorial utilizza l’ultima immagine Docker di NGINX disponibile su Docker Hub.
Copiare i File con il Comando docker cp
Per iniziare questo tutorial, imparerai a copiare file dall’host Docker ai container utilizzando il comando docker cp
. Il comando docker cp
copia file o cartelle tra un container e il filesystem locale del tuo host Docker e viceversa.
Impariamo come utilizzare il comando Docker cp con un esempio.
1. Apri un terminale sulla tua macchina locale.
2. Crea un file chiamato myfile.txt usando il comando touch
. Il myfile.txt sarà copiato dall’host Docker al contenitore.
3. Esegui il comando docker run
. Il seguente docker run creerà un nuovo contenitore in background. Il comando contiene tre parametri descritti di seguito:
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
sarà l’immagine utilizzata per eseguire il contenitore.

4. Verifica se il contenitore Docker è stato creato con successo utilizzando il comando docker ps
. Dopo aver eseguito il comando docker ps
, dovresti vedere un nuovo valore generato nell’attributo CONTAINER ID (Nel caso sottostante ccae4670f030
) utilizzando l’immagine NGINX che conferma che il contenitore è stato creato con successo.

Prima di eseguire il comando Docker cp, la sintassi del comando Docker cp è:
CONTAINER: SRC_PATH
specifica il percorso di origine del contenitore.DEST_PATH
è il percorso di destinazione sull’host.CONTAINER: DEST_PATH
è il percorso di destinazione sul contenitore.
Inoltre, puoi anche aggiungere le opzioni
con i seguenti parametri nel comando come segue:
- Usando l’opzione archive o a, si copiano tutti i permessi utente e del gruppo principale dei file e delle cartelle.
- Utilizzando l’opzione L, specificare questa opzione consentirà la copia di qualsiasi collegamento simbolico nel percorso di origine al percorso di destinazione.
5. Successivamente, eseguire il comando docker cp
. Il comando docker cp
copierà il file myfile.txt creato in precedenza nella directory /usr/share del contenitore. ccae4670f030
è l’ID del contenitore a cui sarà copiato il file myfile.txt.
6. Infine, accedere al contenitore in esecuzione eseguendo il comando docker exec
con /bin/bash
, utilizzato come shell predefinita per il login dell’utente nel sistema Linux.
- Il flag
i
indica che si desidera aprire una sessione SSH interattiva nel contenitore. Il flagi
non chiude la sessione SSH anche se il contenitore non è collegato. - Il flag
t
alloca una pseudo-TTY che deve essere utilizzata per eseguire comandi in modo interattivo.sudo docker exec -it ccae4670f030 /bin/bash
Vedrai qui sotto di essere ora connesso alla shell del contenitore quando esegui docker exec
.

7. Dopo aver effettuato l’accesso al contenitore, verifica se myfile.txt è stato copiato nel contenitore utilizzando il comando ls.
ls
è un comando per elencare i file del computer nei sistemi operativi Unix e simili a Unix.grep
cercherà tutti i file o le cartelle che iniziano con la stringamy
all’interno della directory usr/share.

Copiare i file usando il DockerFile
Nella sezione precedente, hai imparato come copiare i file nel contenitore eseguendo il comando Docker cp. Cosa fare se è necessario copiare più file in una volta? Certamente, eseguire più comandi diventa un onere! Per risolvere l’esecuzione di più comandi cp, perché non provare a copiare file o cartelle nei contenitori utilizzando il Dockerfile con i comandi COPY
?
Il deploy di un contenitore e la copia dei file/cartelle utilizzando il Dockerfile ti consentono di rimuovere i passaggi di copia manuali eseguiti nella sezione precedente. Un Dockerfile è un documento di testo che contiene tutti i comandi che un utente potrebbe chiamare da riga di comando per assemblare un’immagine.
Creiamo un Dockerfile, eseguiamo un contenitore da esso e infine copiamo i file.
1. Crea una cartella chiamata ~/host-to-container-copy-demo, quindi cambia (cd
) la directory di lavoro in quella cartella. Questa cartella conterrà tutti i file che creerai in questa demo.
2. Ora, crea due file di testo denominati myfile1.txt e myfile2.txt, copia e incolla il loro contenuto nei file e salvali nella directory ~/host-to-container-copy-demo.
3. Creare un altro file, copiare/incollare la configurazione sottostante e salvare il file come Dockerfile all’interno della directory ~/host-to-container-copy-demo. Quando completo, Docker utilizzerà questo DockerFile per eseguire tutti i comandi necessari per creare una nuova immagine Docker sopra a qualsiasi immagine di base.
Il DockerFile sottostante contiene varie istruzioni che costruiranno il nuovo container:
FROM
– L’istruzione FROM inizializza una nuova fase di compilazione e imposta l’immagine di base per le istruzioni successive.COPY
– Il comando COPY copia un file dalla macchina host (host Docker) al container.
4. Verifica tutti i file necessari per costruire la nuova immagine eseguendo il comando tree
. Dovresti vedere Dockerfile, myfile1.txt e myfile2.txt sotto la directory ~/host-to-container-copy-demo.

5. Successivamente, costruisci l’immagine eseguendo il comando docker build
. Il flag t
viene utilizzato per etichettare l’immagine updated_ubuntu_image
con il latest
e .
consente a Docker di selezionare tutti i file necessari dalla directory di lavoro attuale.

docker build
command 6. Ora, verifica la nuova immagine costruita updated_ubuntu_image
eseguendo il comando docker images
. Nota l’attributo REPOSITORY. Questo attributo è il tag creato con il flag -t
nel passaggio precedente.

7. Infine, esegui il container Docker utilizzando la nuova immagine appena creata eseguendo il comando docker run
. Il flag -it
istruisce Docker ad allocare un pseudo-terminal connesso allo stdin del container. bash
fornisce la shell predefinita per l’accesso dell’utente al sistema Linux.
Vedrai di seguito di essere ora nella shell Bash del container Docker.

8. Successivamente, verifica se i file sono stati copiati con successo sul container nelle directory /tmp e /usr/share eseguendo il comando ls
.

Montaggio di un Volume di Archiviazione e Accesso ai File con il Comando Docker Volume
Fino a questo momento, hai imparato come copiare i file dall’host al container utilizzando due approcci diversi: usando il comando docker cp
e un DockerFile. Questa volta, impariamo come condividere facilmente i sistemi di file tra l’host e i container usando il comando docker volume
.
Assumendo che tu sia ancora connesso al terminale:
1. Crea un volume sull’host Docker eseguendo il comando docker volume create
. Il comando seguente creerà un volume chiamato my-vol
. sudo docker volume create my-vol
2. Verifica che il volume sia stato creato con successo eseguendo il comando docker volume ls
. Il comando docker volume ls elenca il volume. Dopo aver eseguito il comando docker volume ls
, vedrai my-vol
nell’attributo VOLUME NAME che conferma la corretta creazione del volume.

3. Successivamente, esegui il container usando il comando docker run
.
- Il container chiamato
volume_testing
utilizza l’immaginenginx: 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. Verifica se il volume my-vol creato in precedenza è montato correttamente nel contenitore usando il comando docker inspect
. Il comando Docker inspect fornisce le informazioni sul contenitore. Dopo aver eseguito il comando docker inspect
, verranno visualizzati tutti i dettagli del contenitore specificato (volume_testing
), compresi i dettagli del mount, come mostrato di seguito.
Di seguito, lo snapshot dell’immagine conferma che il volume (my-vol
) creato sull’host è montato con successo nella directory /app
del contenitore.

Conclusione
In questo tutorial, hai appreso diversi modi per copiare file o cartelle dall’host Docker ai contenitori, come l’uso del comando Docker cp, i comandi dei volumi Docker e il Dockerfile.
Quale approccio sceglierai per copiare dati dall’host ai contenitori Docker?