Como reduzir o tamanho da imagem do Docker

12

Eu tenho um container rodando o GlassFish. Quando tentei confirmar uma imagem, ela se tornou 14 GB. Mais tarde, apaguei /tmp/no contêiner de 10 GB e tentei confirmar uma imagem, mas a imagem ainda é de 14 GB. Parece que a exclusão de arquivos do contêiner não é refletida no tamanho da imagem. Como corrijo esse problema?

user1726453
fonte
1
Ninguém pode realmente fazer nenhuma recomendação sem conhecer um pouco mais sobre sua configuração. O que é o Dockerfile? Qual é a árvore de arquivos que é adicionada ao contexto de construção do Docker? A glassfishimagem oficial do Docker tem cerca de 1 GB. Embora seja muito grande para uma imagem do Docker, ela ainda é muito menor do que você parece estar construindo.
Andy Shinn
Veja esta pergunta SO para um tutorial. Além disso, esta pesquisa no Google tem vários artigos relevantes.
Misha Brukman

Respostas:

9

O problema que você pode estar enfrentando é que a remoção de arquivos em uma confirmação não altera o fato de que o arquivo estava lá em uma imagem anterior, para que a imagem anterior ainda seja 14G.

Dê uma olhada na parte "Camadas" deste artigo: http://woudenberg.io/reducing-docker-image-size/

Para resolver esse problema, você precisa remover os itens em / tmp / dentro do commit original que os gerou, para que a imagem criada como resultado desse commit não os inclua. Isso é fácil quando se usa dockerfiles, mas não é possível se é possível criar imagens com confirmações.

Outra coisa que você pode fazer é esmagar camadas exportando / importando a imagem.

Juan Antonio Galán Martínez
fonte
4

Estendendo a resposta de Juan Antonio, Dockerfilefazer isso não economizará espaço:

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

O que você precisa fazer é:

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

No lado negativo, isso significa menos cache, como se algo mudasse nessa grande linha de comando, o Docker precisará executar novamente o conjunto inteiro de comandos.

Wernight
fonte