¿Por qué la imagen de mi contenedor `debian-slim` es mucho más grande que cuando uso `alpine`?

¿Por qué la imagen de mi contenedor `debian-slim` es mucho más grande que cuando uso `alpine`?

Me gustaría utilizarlo debian:bookwormcomo imagen de contenedor base. Pero encuentro que la imagen del contenedor crece (según dive) muy rápidamente a medida que instalo aplicaciones usando apt-get.

Descargo de responsabilidad: Estos resultados "de referencia" se promedian a partir de algunas ejecuciones repetidas en mi máquina, pero creo que son representativos del problema en términos generales.

Comparando para una sola aplicación

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

lo que resulta en:

base Tiempo de construcción tamaño
alpino 2,3s 9,2MB
debian-slim 5.1s 132 megas

debian-slimlleva más tiempo porque apt-get updatees más lento, pero la diferencia en la imagen base es significativa para una sola aplicación.

Comparando con múltiples aplicaciones

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 Tiempo de construcción tamaño
alpino 3,2s 23 megas
debian-slim 9.0s 201 megas

Alpine aumentó en 0,9 segundos y 13,8 MB. Debian aumentó en 3,9 segundos y 69 MB.

Lista de archivos

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

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

¿Alrededor de 50 MB parecen estar relacionados perl?

Ejemplo de caso extremo

Tengo una imagen que incluye varias herramientas de compilación (Java, Go, NodeJS, ...), que obviamente será pesada, pero aún así me sorprende que tenga un tamaño de 7,1 GB. Pero puede que no sea culpa de debian/apt. Simplemente ejecutar pip3 install ansibleagrega 565 MB, de los cuales 222 MB son para fortinet(que imagino que pocas personas usan), así que supongo que la lección es estar atento al usar administradores de paquetes y no usar los paquetes amplios nginxo ansible, sino los más específicos/explícitos.

Pregunta

¿Por qué Debian crece mucho más e instala aplicaciones mucho más lentamente? Esto es especialmente relevante para imágenes de contenedores pesados, donde la diferencia puede ser de 100 MB frente a 1 GB.

Por lo que leí en línea, Alpine es más vanguardista, comparable a Arch, con paquetes de nivel comunitario, mientras que los paquetes de Debian son más confiables. Para uso empresarial, en un entorno de seguridad crítica, parece necesario utilizar paquetes de Debian, pero también es difícil justificar imágenes tan grandes. ¿Es Alpine confiable para uso empresarial? (Lo ideal sería que todos los binarios fueran reproducibles y estuvieran firmados por los desarrolladores, por lo que las compilaciones independientes serían confiables, pero entiendo que estamos lejos de eso).

¿Se puede hacer algo para reducir el tamaño/tiempo de compilación de Debian? Una opción es instalar los binarios manualmente. apt-get update¿Podría hacerse más rápido usando un proxy apt en el servidor de compilación?

Una explicación podría ser que la imagen alpina tiene muchas dependencias integradas (¿busybox?), mientras que debian/ debian-slimnecesita agregarlas.

información relacionada