GNU/Linux >> Linux Esercitazione >  >> Panels >> Docker

Come copiare file con Docker cp nel tuo Docker Container

Se devi copiare file dall'host Docker al tuo container Docker, questo tutorial fa per te.

In questo tutorial imparerai a copiare file dall'host Docker a un container Docker utilizzando vari approcci.

Andiamo al punto!

Prerequisiti

Se desideri seguire passo dopo passo, assicurati di avere quanto segue:

  • Un host Linux. Questo tutorial utilizza Ubuntu 18.04.5 LTS.
  • Docker installato sull'host Linux. Questo tutorial utilizza Docker v19.03.11. Puoi confermare la tua versione Docker eseguendo docker version .
  • Qualsiasi immagine Docker scaricata e disponibile. Questo tutorial utilizza l'ultima immagine Docker NGINX disponibile su Docker Hub.

Copiare file con docker cp Comando

Per iniziare questo tutorial, imparerai a copiare i file dall'host Docker ai contenitori usando il docker cp comando. Il docker cp comando copia file o cartelle tra un contenitore e il filesystem locale del tuo host Docker e viceversa.

Impariamo come utilizzare il comando Docker cp con un esempio.

1. Apri un terminale sul tuo computer locale.

2. Crea un file chiamato miofile.txt utilizzando il touch comando. Il miofile.txt verrà copiato dall'host Docker al contenitore.

touch myfile.txt

3. Esegui docker run comando. L'esecuzione della finestra mobile sottostante creerà un nuovo contenitore in background. Il comando seguente contiene tre parametri descritti di seguito:

  • d flag che esegue il contenitore in background e lo mantiene attivo fino all'eliminazione.
  • p flag pubblica la porta di un container 80 all'host sulla porta 80 .
  • nginx sarà l'immagine che verrà utilizzata per eseguire il contenitore.
sudo docker run -d -p 80:80 nginx

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

sudo docker ps

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 options con i seguenti parametri nel comando come segue:

  • Utilizzo di archivio o a:copia tutte le autorizzazioni utente e gruppo principale dei file e delle cartelle.
  • Utilizzo di L:specificando l'opzione L, qualsiasi collegamento simbolico nel percorso di origine verrà copiato nel percorso di destinazione.
# 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. Quindi, esegui il docker cp comando. Il docker cp il comando copierà il miofile.txt che hai creato in precedenza nei contenitori /usr/share directory. ccae4670f030 è l'ID del contenitore in cui è myfile.txt verrà copiato.

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

6. Infine, SSH nel contenitore in esecuzione eseguendo docker exec comando con /bin/bash , che viene utilizzata come shell predefinita per l'accesso utente del sistema Linux.

  • Il i flag che indica che desideri aprire una sessione SSH interattiva nel contenitore. Il i flag non chiude la sessione SSH anche se il contenitore non è collegato.
  • Il t flag alloca uno pseudo-TTY che può essere usato per eseguire comandi in modo interattivo.sudo docker exec -it ccae4670f030 /bin/bash
sudo docker exec -it ccae4670f030 /bin/bash

Di seguito vedrai che ora sei connesso alla shell del contenitore quando esegui docker exec .

7. Dopo aver effettuato l'accesso al contenitore, verificare 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, iniziando con la stringa my all'interno di usr/share directory.

Copiare file utilizzando DockerFile

Nella sezione precedente, hai imparato come copiare i file nel contenitore eseguendo il comando Docker cp. Cosa succede se devi copiare più file in una volta sola? Certamente, eseguire più comandi diventa un sovraccarico! Per risolvere l'esecuzione di più comandi cp, perché non provare a copiare file o cartelle in contenitori utilizzando Dockerfile con COPY comandi?

La distribuzione di un contenitore e la copia di file/cartelle utilizzando Dockerfile consente 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 può chiamare sulla riga di comando per assemblare un'immagine.

Creiamo un Dockerfile, eseguiamo un container da esso e infine copiamo i file.

1. Crea una cartella denominata ~/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.

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

2. Ora, crea due file di testo denominati myfile1.tx t e miofile2.txt , copiali e incollali nei file e salvali nella ~/host-to-container-copy-demo directory.

# 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. Crea un altro file, copia/incolla la configurazione seguente e salva il file come Dockerfile all'interno della ~/demo da host a copia-contenitore directory. Al termine, Docker utilizzerà questo DockerFile per eseguire tutti i comandi necessari per creare una nuova immagine Docker sopra qualsiasi immagine di base.

Il File Docker di seguito contiene vari passaggi/istruzioni che costruiranno il nuovo contenitore:

  • 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 contenitore.
# 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. Verifica tutti i file richiesti per creare la nuova immagine eseguendo l'tree comando. Dovresti vedere Dockerfile, miofile1.txt e miofile2.txt sotto la ~/demo da host a copia-contenitore directory.

5. Quindi, crea l'immagine eseguendo docker build comando. Il t flag viene utilizzato per taggare l'immagine updated_ubuntu_image con l'latest e. consente a Docker di selezionare tutti i file necessari dalla directory di lavoro attuale.

sudo docker build -t updated_ubuntu_image:latest .

6. Ora verifica l'immagine appena creata updated_ubuntu_image eseguendo le docker images comando. Nota il REPOSITORY attributo. Questo attributo è il tag creato con -t flag nel passaggio precedente.

sudo docker images

7. Infine, esegui il contenitore docker utilizzando l'immagine appena creata eseguendo docker run comando. Il -it flag indica a Docker di allocare uno pseudo-terminale connesso allo stdin del contenitore. bash fornisce la shell predefinita per l'accesso utente del sistema Linux.

sudo docker run -it updated_ubuntu_image bash

Di seguito vedrai che ora sei nella shell Bash del contenitore Docker.

8. Successivamente, verifica se i file sono stati copiati correttamente sul contenitore nelle directory /tmp e /usr/share eseguendo ls comando.

Montaggio di un volume di archiviazione e accesso ai file con il Docker Volume Comando

Finora hai imparato a copiare i file dall'host al container utilizzando due diversi approcci usando il docker cp comando e un DockerFile . Questa volta, impariamo come condividere facilmente i file system tra host e container utilizzando il docker volume comando.

Supponendo che tu sia ancora connesso al terminale:

1. Crea un volume sull'host Docker eseguendo docker volume create comando. Il comando seguente creerà un volume chiamato my-vol . sudo docker volume create my-vol

sudo docker volume create my-vol

2. Verifica che il volume sia stato creato correttamente eseguendo docker volume ls comando. Il comando docker volume ls elenca il volume. Dopo aver eseguito il docker volume ls comando, vedrai my-vol nell'attributo VOLUME NAME che conferma che il volume è stato creato correttamente.

sudo docker volume ls

3. Quindi, esegui il contenitore utilizzando docker run comando.

  • Il contenitore denominato volume_testing usa nginx: latest immagine.
  • d flag esegue il contenitore in background e lo mantiene attivo fino all'eliminazione.
  • v flag monta il volume my-vol creato sull'host Docker alla destinazione del contenitore /app directory.
sudo docker run -d --name volume_testing -v my-vol:/app nginx:latest

4. Verifica se il volume my-vol che hai creato in precedenza è montato correttamente con il contenitore utilizzando il docker inspect comando. Il comando Docker inspect fornisce le informazioni sul contenitore. Dopo aver eseguito il docker inspect comando, visualizzerà tutti i dettagli del contenitore specificato (volume_testing ) dettagli, inclusi i dettagli di montaggio, come mostrato di seguito.

sudo docker inspect volume_testing

Di seguito, l'istantanea dell'immagine conferma che il volume (my-vol ) che hai creato sull'host è stato montato correttamente con il /app del contenitore directory.

Conclusione

In questo tutorial, hai appreso diversi modi per copiare file o cartelle dall'host Docker ai contenitori, ad esempio utilizzando il comando Docker cp, i comandi del volume Docker e Dockerfile.

Quindi quale approccio utilizzerai successivamente durante la copia dei dati dall'host ai contenitori Docker?


Docker
  1. Come installare WordPress con Docker su Ubuntu

  2. Come installare Jenkins con Docker

  3. Come distribuire un container nginx con Docker su Linode

  4. Come assegnare un IP statico a un contenitore Docker

  5. Come installare Nextcloud con Docker sul tuo server Linux

Come indicizzare le dipendenze dell'immagine Docker con Syft

Come eseguire Grafana in un contenitore Docker

Migliora il tuo gioco DevOps con questi esempi di esecuzione Docker

Come creare un'immagine di Windows Docker con il tag di build Docker

Come copiare file tra host e contenitore Docker

Come accedere ai file al di fuori di un contenitore Docker