
Я хотел бы использовать 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
необходимо их добавить?