Come ridurre le dimensioni dell'immagine Docker


12

Ho un container con GlassFish. Quando ho provato a commettere un'immagine, è diventato 14 GB. Successivamente, ho eliminato /tmp/nel contenitore che era di 10 GB e ho provato a eseguire il commit di un'immagine, ma l'immagine è ancora di 14 GB. Sembra che l'eliminazione dei file dal contenitore non si rifletta nella dimensione dell'immagine. Come posso risolvere questo problema?


1
Nessuno può davvero dare consigli senza sapere qualcosa in più sulla tua configurazione. Cos'è il Dockerfile? Qual è l'albero dei file che viene aggiunto al contesto di compilazione Docker? L' glassfishimmagine Docker ufficiale è di circa 1 GB. Sebbene sia dannatamente grande per un'immagine Docker, è ancora molto più piccolo di quello che sembra stia costruendo.
Andy Shinn,

Vedi questa domanda SO per un howto. Inoltre, questa ricerca su Google contiene numerosi articoli pertinenti.
Misha Brukman,

Risposte:


9

Il problema che potresti dover affrontare è che la rimozione dei file in un commit non cambia il fatto che il file fosse presente in un'immagine precedente, quindi l'immagine precedente è ancora 14G.

Dai un'occhiata alla parte "Livelli" in questo articolo: http://woudenberg.io/reducing-docker-image-size/

Per risolvere il problema, devi rimuovere le cose in / tmp / all'interno del commit originale che le ha generate, quindi l'immagine creata come risultato di quel commit non le include. Questo è facile quando si usano file docker ma non è sicuro se possibile quando si creano immagini con commit.

Un'altra cosa che potresti fare è schiacciare i livelli esportando / importando l'immagine.


4

Estendendo la risposta di @Juan Antonio, Dockerfilefare ciò non risparmierà spazio:

RUN apt-get install -y foo bar
...
RUN apt-get purge --auto-remove -y foo bar

Quello che devi fare invece è:

RUN apt-get install -y foo bar && \
    && ... \
    && apt-get purge --auto-remove -y foo bar

Sul lato negativo, questo significa meno cache come se qualcosa dovesse cambiare in quella grande riga di comando, Docker dovrà rieseguire l'intero set di comandi.

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.