GNU/Linux >> Linux Esercitazione >  >> Linux

Come copiare i file dal dockerfile all'host?

Questo è ora possibile poiché Docker 19.03.0 a luglio 2019 ha introdotto "output di build personalizzati". Consulta i documenti ufficiali sugli output di build personalizzati.

Per abilitare gli output di build personalizzati dall'immagine di build nell'host durante il processo di build, devi attivare il BuildKit che è un nuovo modo retrocompatibile consigliato per il motore per eseguire la fase di costruzione. Consulta i documenti ufficiali per l'abilitazione di BuildKit.

Questo può essere fatto in 2 modi:

  1. Imposta la variabile d'ambiente DOCKER_BUILDKIT=1 o
  2. Impostalo nel motore docker per impostazione predefinita aggiungendo "features": { "buildkit": true } alla radice del json di configurazione.

Dai documenti ufficiali sugli output di build personalizzati:

gli esportatori personalizzati ti consentono di esportare gli artefatti della build come file sul filesystem locale invece di un'immagine Docker, che può essere utile per generare file binari locali, generazione di codice ecc.

...

L'esportatore locale scrive i file di build risultanti in una directory sul lato client. L'esportatore tar è simile ma scrive i file come un singolo tarball (.tar).

Se non viene specificato alcun tipo, il valore predefinito è la directory di output dell'esportatore locale.

...

L'opzione --output esporta tutti i file dalla fase di destinazione. Un modello comune per esportare solo file specifici è eseguire build in più fasi e copiare i file desiderati in una nuova fase iniziale con COPY --from.

per esempio. un Dockerfile di esempio

FROM alpine:latest AS stage1
WORKDIR /app
RUN echo "hello world" > output.txt

FROM scratch AS export-stage
COPY --from=stage1 /app/output.txt .

In esecuzione

DOCKER_BUILDKIT=1 docker build --file Dockerfile --output out .

La coda dell'output è:

 => [export-stage 1/1] COPY --from=stage1 /app/output.txt .
0.0s
 => exporting to client
0.1s
 => => copying files 45B
0.1s

Questo produce un file locale out/output.txt creato dal RUN comando.

$ cat out/output.txt
hello world

Tutti i file vengono emessi dalla fase di destinazione

Il --output l'opzione esporterà tutto file dalla fase di destinazione. Quindi, utilizzando uno stage non scratch con COPY --from causerà la copia di file estranei nell'output. La raccomandazione è di utilizzare una fase iniziale con COPY --from .


Copiare i file "dal Dockerfile" all'host non supportato. Il Dockerfile è solo una ricetta che specifica come costruire un'immagine.

Quando crei, hai la possibilità di copiare i file dall'host all'immagine che stai creando (con il COPY direttiva o ADD )

Puoi anche copiare i file da un contenitore (un'immagine che è stata docker run 'd) all'host con docker cp (in realtà, cp può anche copiare dall'host al contenitore)

Se vuoi restituire al tuo host alcuni file che potrebbero essere stati generati durante la compilazione (come ad esempio chiamare uno script che genera ssl), puoi eseguire un contenitore, montare una cartella dal tuo host ed eseguire i comandi cp.

Vedi ad esempio questo script getcrt.

docker run -u root --entrypoint=/bin/sh --rm -i -v ${HOME}/b2d/apache:/apache apache << COMMANDS
pwd
cp crt /apache
cp key /apache
echo Changing owner from \$(id -u):\$(id -g) to $(id -u):$(id -u)
chown -R $(id -u):$(id -u) /apache/crt
chown -R $(id -u):$(id -u) /apache/key
COMMANDS

Tutto compreso tra COMMANDS sono comandi eseguiti sul contenitore, incluso cp quelli che stanno copiando sull'host ${HOME}/b2d/apache cartella, montata all'interno del contenitore come /apache con -v ${HOME}/b2d/apache:/apache .

Ciò significa che ogni volta che copi qualcosa su /apache nel contenitore, stai effettivamente copiando in ${HOME}/b2d/apache sull'host!


Sebbene non sia direttamente supportato tramite Dockerfile funzionalità, puoi copiare i file da un'immagine docker creata.

containerId=$(docker create example:latest)
docker cp "$containerId":/source/path /destination/path
docker rm "$containerId"

Linux
  1. Come trovare e copiare determinati tipi di file da una directory all'altra in Linux

  2. Come copiare file da Wine a desktop?

  3. Come copiare ricorsivamente i file per estensione del file??

  4. Scopri come copiare file e cartelle da/su un altro server

  5. Come faccio a copiare il testo dal mio xterm senza mouse?

Come copiare un gran numero di file in Linux

Come scaricare file da server Linux remoti

Come copiare file in Linux usando il comando CP

Come costruire il kernel Linux da zero

Come utilizzare Docker Cp per copiare file tra host e contenitori

Come copiare file tra host e contenitore Docker