Por que a imagem do meu contêiner `debian-slim` é muito maior do que quando uso `alpine`?

Por que a imagem do meu contêiner `debian-slim` é muito maior do que quando uso `alpine`?

Gostaria de usar debian:bookwormcomo minha imagem de contêiner base. Mas acho que a imagem do contêiner cresce (de acordo com dive) muito rapidamente à medida que instalo aplicativos usando o apt-get.

Isenção de responsabilidade: esses resultados de "referência" são calculados a partir de algumas execuções repetidas em minha máquina, mas acho que são amplamente representativos do problema.

Comparando para um único aplicativo

FROM debian:bookworm-slim
RUN apt-get update && apt-get install -y --no-install-recommends nginx
FROM alpine:3.18.2
RUN apk add --no-cache nginx

o que resulta em:

base tempo de construção tamanho
alpino 2,3s 9,2MB
debian-slim 5,1s 132MB

debian-slimdemora mais porque apt-get updateé mais lento, mas a diferença da imagem base é significativa para um único aplicativo.

Comparando com vários aplicativos

FROM debian:bookworm-slim
RUN apt-get update && apt-get install -y --no-install-recommends nginx curl wget git iputils-ping rsync unzip && \
    apt-get clean && \
    rm -rf /var/cache/apt/archives /var/lib/apt/lists/*
FROM alpine:3.18.2
RUN apk add --no-cache nginx curl wget git iputils-ping rsync unzip
base tempo de construção tamanho
alpino 3,2s 23MB
debian-slim 9,0s 201MB

Alpine aumentou 0,9s e 13,8 MB. O Debian aumentou em 3,9s e 69 MB.

Lista de arquivos

Usandodocker run --rm -it <tag> du -h > debian.txt

alpino:https://pastebin.com/mHTHDFwW debian-slim:https://pastebin.com/wTpuYGDD

Cerca de 50 MB parecem estar relacionados a perl?

Exemplo de caso extremo

Tenho uma imagem que inclui uma série de ferramentas de construção (Java, Go, NodeJS, ...), que obviamente serão pesadas, mas ainda estou surpreso que seja de 7,1 GB. Mas pode não ser culpa do debian/apt. Apenas executar pip3 install ansibleadiciona 565 MB, dos quais 222 MB são para fortinet(que imagino que poucas pessoas usam), então acho que a lição é ficar atento ao usar gerenciadores de pacotes, e não usar pacotes amplos nginxou ansible, mas mais específicos/explícitos.

Pergunta

Por que o Debian cresce muito mais e instala aplicativos muito mais lentamente? Isto é especialmente relevante para imagens de contêineres pesados, onde a diferença pode ser de 100 MB versus 1 GB.

Pelo que li online, o Alpine é mais inovador, comparável ao Arch, com pacotes de nível comunitário, enquanto os pacotes Debian são mais confiáveis. Para uso corporativo, em um ambiente de segurança crítica, parece necessário usar pacotes Debian, mas também é difícil justificar imagens tão grandes. A Alpine é confiável para uso empresarial? (Idealmente, todos os binários seriam reproduzíveis e assinados pelos desenvolvedores, portanto, compilações independentes seriam confiáveis, mas entendo que estamos longe disso?).

Algo pode ser feito para reduzir o tamanho/tempo de construção do Debian? Uma opção é instalar os binários manualmente. apt-get updatepoderia ser mais rápido usando um apt-proxy no servidor de compilação?

Uma explicação poderia ser que a imagem alpina tem muitas dependências integradas (busybox?), enquanto debian/ debian-slimprecisa adicioná-las?

informação relacionada