Qual è la differenza tra salvataggio ed esportazione in Docker?


Risposte:


169

La risposta breve è:

  • saverecupererà un'immagine: per una VM o un server fisico, quella sarebbe l'installazione .ISO immagine o disco. Il sistema operativo di base.

    Comprimerà i livelli e i metadati di tutta la catena richiesta per creare l'immagine. È quindi possibile caricare questa catena di immagini "salvate" in un'altra istanza della finestra mobile e creare contenitori da queste immagini.

  • exportrecupererà l'intero contenitore: come un'istantanea di una normale VM. Salva ovviamente il sistema operativo, ma anche qualsiasi modifica apportata, qualsiasi file di dati scritto durante la vita del contenitore. Questo è più simile a un backup tradizionale.

    Ti darà un archivio .tar piatto contenente il filesystem del tuo contenitore.

Modifica: poiché la mia spiegazione può ancora portare a confusione, penso che sia importante capire che uno di questi comandi funziona con i contenitori, mentre l'altro funziona con le immagini.

  • Un'immagine deve essere considerato come 'morto' o immutabile, partendo 0 o 1000 contenitori da non altererà un singolo byte. Ecco perché ho fatto un confronto con una ISO di installazione di sistema in precedenza. Forse è anche più vicino a un live CD.

  • Un contenitore "avvia" l'immagine e aggiunge un ulteriore livello sopra di essa. Questo livello memorizza qualsiasi modifica sul contenitore (file creati / modificati / rimossi ...).


2
Solo per il mio chiarimento: supponiamo di avere un container in esecuzione in cui ho apportato alcune modifiche (ad esempio, ho creato una nuova cartella). Ora posso creare un'immagine di questo contenitore (con docker commit). Posso quindi savel'immagine. Oppure posso exportdirettamente il contenitore. E entrambi i modi ( savel'immagine e exportil contenitore) avranno lo stesso risultato?
Thomas Uhrig,

2
Sì e no. Il exportvi darà una TV .tar archivio contenente il filesystem contenitore. saveimpacchetterà i livelli e i metadati di tutta la catena richiesta per costruire l'immagine. È quindi possibile caricare questa " saved" catena di immagini in un'altra istanza della finestra mobile e creare contenitori da queste immagini.
mbarthelemy,

7
@ThomasUhrig È possibile utilizzare l'esportazione per "appiattire" il contenitore su un livello / immagine di base. Inoltre è possibile utilizzarlo per eseguire il backup del contenitore (contenitore dati fe). Ma questo può essere fatto anche senza exportfunzione.
Jiri,

9
Inoltre, con exporttutti i metadati andranno persi, quindi nel caso in cui si provi a eseguire il contenitore con quell'immagine, è necessario rementionare il CMD e altri metdati. saveha funzionato bene per me, ma l'esportazione è stata dolorosa
Mirage

1
Voglio aggiornare la mia immagine all'ultima versione. Il contenitore in esecuzione ora ha apportato alcune modifiche al file system interno. Dopo l'aggiornamento, voglio che queste modifiche vengano ripristinate. A quanto ho capito, sia il salvataggio / caricamento che l'esportazione / importazione creeranno una nuova immagine per me, che non è quello che voglio. Voglio usare una nuova versione dell'immagine da dockerhub, ma ripristinare i dati dal contenitore esistente. Qual è il miglior modo di agire?
Dmitry z

20

Esistono due differenze principali tra i comandi savee export.

  1. saveIl comando salva l'intera immagine con cronologia e metadati ma il exportcomando esporta solo la struttura dei file (senza cronologia e metadati). Quindi il file tar esportato sarà più piccolo di quello salvato.

  2. Quando si utilizza il file system esportato per la creazione di una nuova immagine, allora questa nuova immagine non conterrà alcuna USER, EXPOSE, RUNecc comandi dal Dockerfile. Verrà trasferita solo la struttura del file. Pertanto, quando si utilizzano le parole chiave menzionate nel Dockerfile, non è possibile utilizzare il comando export per trasferire l'immagine su un altro computer: è sempre necessario utilizzare il comando save.


4

L'immagine esportata non avrà alcun livello o informazioni sulla cronologia salvate, quindi sarà più piccola e non sarà possibile eseguire il rollback.

L'immagine salvata avrà informazioni sul livello e sulla cronologia, quindi più grandi.

Se lo dai a un cliente, la Q è che vuoi mantenere quei livelli o no?


quindi, un'esportazione è simile a un file txt con niente scritto su di esso giusto ?? @neil
AATHITH RAJENDRAN,

4
è come un file di testo senza buffer di annullamento 8)
Neil McGill

2

Tecnicamente, il salvataggio / caricamento funziona con repository che possono essere una o più immagini, denominate anche livelli. Un'immagine è un singolo livello all'interno di un repository. Infine, un contenitore è un'immagine istanziata (in esecuzione o meno).


1

Docker save Produce un repository di file tar che contiene tutti i layer principali e tutti i tag + versioni, o repository specificato: tag, per ogni argomento fornito dall'immagine .

Esportazione Docker Produce il file specificato (può essere tar o tgz) con contenuto piatto senza contenuto di volumi specificati dal contenitore .

il salvataggio della finestra mobile deve essere utilizzato sull'immagine finestra mobile mentre l' esportazione finestra mobile deve essere utilizzata sul contenitore (proprio come l'immagine in esecuzione)

Salva utilizzo

finestra mobile salva [OPZIONI] IMMAGINE [IMMAGINE ...]

Salvare un'immagine o le immagini in un archivio tar (trasmesso in streaming su STDOUT per impostazione predefinita)

--help = false Stampa utilizzo -o, --output = "" Scrivi in ​​un file, invece di STDOUT

esportazione di utilizzo

esportazione docker [OPZIONI] CONTENITORE

Esporta il contenuto del filesystem di un container come archivio tar

--help = false Stampa utilizzo -o, --output = "" Scrivi in ​​un file, invece di STDOUT


1
La domanda riguarda la differenza tra due comandi, non la definizione e l'utilizzo generalizzati!
Abu Shumon,

0

export: container (filesystem)-> image tar.
import: exported image tar-> image. Solo uno strato.

save: image-> image tar.
load: saved image tar-> image. Tutti i livelli verranno ripristinati.

Da Docker in azione, seconda edizione p190.

Le immagini a strati mantengono la cronologia dell'immagine, i metadati di creazione del contenitore e i vecchi file che potrebbero essere stati eliminati o sovrascritti.

Le immagini appiattite contengono solo il set corrente di file sul filesystem.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.