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

Come utilizzare Docker Cp per copiare file tra host e contenitori

Hai bisogno di ottenere alcuni file dentro o fuori un contenitore Docker? Il docker cp comando ti consente di copiare tra file system host e container in modo da poter aggiungere dettagli di configurazione, creare backup e ripristinare i dati esistenti.

Sintassi di base

docker cp accetta i percorsi di origine e di destinazione come suoi due argomenti:

docker cp example.txt my-container:/example.txt

Qui example.txt viene copiato dalla tua directory di lavoro in /example.txt nel my-container contenitore. Puoi invertire i due argomenti per copiare /example.txt dal contenitore e nella directory di lavoro.

L'argomento che fa riferimento al percorso del contenitore deve essere preceduto da un ID o un nome contenitore seguito da due punti (: ). Puoi trovare l'ID o il nome di un container in esecuzione con docker ps .

Ogni docker cp il comando richiede un percorso del filesystem locale e un percorso del contenitore:non puoi copiare direttamente tra due contenitori. Se necessario, utilizzare una procedura in più passaggi, copiando prima dal contenitore di origine al filesystem, quindi dal nuovo percorso locale al contenitore di destinazione.

Copiare intere directory

docker cp può anche copiare ricorsivamente le directory:

docker cp /home/demo/website apache-container:/var/www/html/.

Docker copierà tutto in /home/demo/website e trasferiscilo in /var/www/html .

Copia comportamento

Quando copi un file, Docker crea un nuovo file nella destinazione se non esiste già. I file esistenti vengono sovrascritti con il nuovo contenuto. Quando la destinazione è una directory, il file viene copiato utilizzando il nome del file di origine. Un'eccezione è quando la destinazione specificata termina con un / , che denota una directory, ma il percorso non esiste già. In questo scenario verrà generato un errore.

Il processo è un po' più complicato per le copie di directory. Verrà creata una nuova directory nella destinazione con il contenuto della directory di origine, se il percorso di destinazione non esiste già. Quando esiste, il comportamento varia a seconda che tu abbia incluso un /. finale componente nel percorso.

  • /. è presente – La directory di origine viene copiato nella directory di destinazione esistente.
  • /. non è presente – Il contenuto della directory di origine viene copiato nella destinazione.

La sottile distinzione determina se viene creata una nuova sottodirectory all'interno della destinazione.

Limitazioni dei comandi

Nonostante il nome, docker cp non è un'implementazione completa del cp comando della shell. Il cp i flag non sono supportati, ad eccezione di -a e -L :

  • -a – Modalità di archiviazione, che conserva i dettagli di utenti e gruppi sui file copiati.
  • -L – Segui i collegamenti simbolici nella directory di origine per copiare il contenuto dei collegamenti di destinazione, anziché i collegamenti stessi.

Per casi d'uso più avanzati in cui è richiesta la copia selettiva, dovrai ricorrere a un approccio diverso.

Utilizzo di Bind Mounts per copiare i file

I volumi Docker forniscono un altro modo per spostare i file tra i container e l'host. Il montaggio vincolato di una directory locale in un contenitore ti consente di accedere al suo contenuto dal filesystem host, eliminando la necessità di utilizzare docker cp .

docker run -v /example/host/directory:/container/path my-image:latest

Il contenuto di /example/host/directory path sono montati nel filesystem del contenitore in /container/path . Puoi interagire con questi file al di fuori di Docker utilizzando strumenti familiari come cp , rsync e il tuo browser di file grafici.

Questa tecnica è utile solo quando lavori con una singola directory contenitore. Non funziona bene quando copi da posizioni arbitrarie poiché devi conoscere i percorsi che utilizzerai in anticipo, quando verrà creato il contenitore.

Dovresti anche fare attenzione ai permessi del filesystem:i file creati all'interno del contenitore saranno solitamente di proprietà di root . Ciò può creare scenari imbarazzanti sull'host in cui non è possibile modificare o eliminare file all'interno della directory associata. Usa il chown comando sull'host e all'interno del contenitore per cambiare la proprietà a seconda dell'ambiente, se necessario.

Che dire di COPY nei file Docker?

docker cp a volte può essere confuso con COPY istruzioni in Dockerfiles. È importante riconoscere che queste due funzionalità servono casi d'uso molto diversi.

COPY non può essere utilizzato per spostare file tra il tuo host e un container in esecuzione. Serve per inserire file in immagini durante il processo di compilazione:

COPY /home/me/my-website /var/www/html/.

Qui il codice sorgente del sito Web viene copiato in un'immagine come parte di una build. Questo è un processo una tantum. Ogni contenitore avviato dall'immagine includerebbe l'origine del sito Web com'era al momento dell'esecuzione di docker build .

docker cp ti consente di sostituire il codice sorgente con una versione più recente una volta che un contenitore è in esecuzione. COPY le istruzioni servono per rendere i file parte di un'immagine statica; cp i comandi interagiscono con i contenitori live.

Quando copiare i file con Docker?

La copia manuale dei file dal tuo host a un container Docker, o viceversa, dovrebbe essere un evento relativamente raro. Le immagini sono pensate per essere autosufficienti, quindi dovrebbero essere fornite con tutto il necessario per avviare un'istanza. La configurazione viene solitamente gestita tramite variabili di ambiente.

I contenitori che devono archiviare i dati in modo persistente dovrebbero utilizzare i volumi Docker. I volumi consentono ai dati di sopravvivere a qualsiasi singolo contenitore, quindi non è necessario docker cp manualmente prima di sostituire un'istanza. Quando esegui i backup, copia i volumi dal tuo host, invece di estrarre i file dai contenitori.

docker cp è particolarmente utile quando si esegue il debug di contenitori o si lavora in un ambiente di sviluppo. A volte è necessario inserire manualmente un file di configurazione temporaneo o estrarre un registro nascosto. Usando docker cp è più rapido e conveniente che ricostruire l'intera immagine ogni volta che si apporta una modifica al codice.

Ricorda sempre che i file sono stati copiati in i contenitori persisteranno solo finché il contenitore è in vita. Avviare un altro contenitore dalla stessa immagine ti darà una tabula rasa, senza i file che hai aggiunto con docker cp .

Riepilogo

docker cp ti consente di spostare i file tra il tuo host e i tuoi contenitori Docker. Funziona con file e directory ma manca della maggior parte delle funzionalità avanzate nel cp basato su shell comando.

Uso regolare di docker cp indica un potenziale allontanamento dalle migliori pratiche dei container. È consigliabile trattarlo come uno strumento pratico per l'uso in fase di sviluppo, piuttosto che come parte integrante del lavoro con i contenitori. La persistenza dei file a lungo termine dovrebbe essere implementata con i volumi poiché si tratta di componenti di prima classe nell'ecosistema Docker.


Docker
  1. differenza tra podman e docker.

  2. Come utilizzare le immagini Docker, i contenitori e i file Docker in modo approfondito

  3. Come condividere i dati tra contenitori Docker

  4. Come eseguire il backup e il ripristino dei container Docker

  5. Come mettere in pausa e riprendere i contenitori Docker

Come ottenere l'indirizzo IP di un contenitore Docker dall'host

Come utilizzare Docker Salva immagine ed esporta per la condivisione

Come copiare file con Docker cp nel tuo Docker Container

Come copiare file tra host e contenitore Docker

Come eseguire i contenitori Docker

Come rinominare o rinominare i contenitori Docker