
Gostaria de usar debian:bookworm
como 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-slim
demora 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 ansible
adiciona 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 nginx
ou 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 update
poderia 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-slim
precisa adicioná-las?