Почему мой образ контейнера `debian-slim` намного больше, чем при использовании `alpine`?

Почему мой образ контейнера `debian-slim` намного больше, чем при использовании `alpine`?

Я хотел бы использовать debian:bookwormв качестве базового образа контейнера. Но я обнаружил, что образ контейнера растет (согласно dive) очень быстро, когда я устанавливаю приложения с помощью apt-get.

Отказ от ответственности: эти «контрольные» результаты являются усредненными результатами нескольких повторных запусков на моей машине, но я думаю, что они в целом отражают проблему.

Сравнение для одного приложения

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

что приводит к:

база время сборки размер
альпийский 2.3с 9.2 МБ
Debian-тонкий 5.1с 132 МБ

debian-slimзанимает больше времени, так как apt-get updateработает медленнее, но разница в базовом изображении существенна для одного приложения.

Сравнение с несколькими приложениями

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
база время сборки размер
альпийский 3.2с 23 МБ
Debian-тонкий 9.0с 201 МБ

Alpine увеличился на 0,9 с и 13,8 МБ. Debian увеличился на 3,9 с и 69 МБ.

Список файлов

С использованиемdocker run --rm -it <tag> du -h > debian.txt

альпийский:https://pastebin.com/mHTHDFwW Debian-тонкий:https://pastebin.com/wTpuYGDD

Около 50 МБ, похоже, связаны с perl?

Пример крайнего случая

У меня есть образ, включающий ряд инструментов сборки (Java, Go, NodeJS, ...), которые, очевидно, будут тяжелыми, но я все равно удивлен, что он составляет 7,1 ГБ. Но это может быть не вина debian/apt. Простой запуск pip3 install ansibleдобавляет 565 МБ, из которых 222 МБ для fortinet(который, как я полагаю, мало кто использует), поэтому я думаю, урок в том, чтобы быть бдительным при использовании менеджеров пакетов и не использовать широкие nginxили ansible, а более конкретные/явные пакеты.

Вопрос

Почему Debian растет намного больше, а приложения устанавливаются намного медленнее? Это особенно актуально для тяжелых образов контейнеров, где разница может составлять 100 МБ против 1 ГБ.

Из того, что я читал в сети, Alpine более передовой, сравнимый с Arch, с пакетами уровня сообщества, в то время как пакеты Debian более надежны. Для корпоративного использования в критически важной для безопасности среде, по-видимому, необходимо использовать пакеты Debian, но также сложно оправдать такие большие образы. Надежен ли Alpine для корпоративного использования? (В идеале все двоичные файлы должны быть воспроизводимыми и подписанными разработчиками, поэтому независимые сборки были бы надежны, но я понимаю, что мы далеки от этого?).

Можно ли что-нибудь сделать, чтобы уменьшить размер Debian/время сборки? Один из вариантов — установить двоичные файлы вручную. apt-get updateМожно ли ускорить это, используя apt-proxy на сервере сборки?

Одним из объяснений может быть то, что образ Alpine имеет много встроенных зависимостей (busybox?), в то время как debian/ debian-slimнеобходимо их добавить?

Связанный контент