Нет такого изображения, AFAIK, но вы можете сделать GCC тоньше, удалив ненужные двоичные файлы GCC.
Это очень сильно зависит от того, какие возможности требуются от GCC.
В качестве отправной точки, я предполагаю, что вам нужна только поддержка C, что означает, что установлены пакеты gcc
и musl-dev
(для стандартных заголовков), в результате образ с размером ~ 100 МБ в Alpine 3.8.
- Если вам не нужна поддержка Objective-C, вы можете удалить
cc1obj
, то есть бэкэнд Objective-C. На Alpine 3.8 он будет расположен на /usr/libexec/gcc/x86_64-alpine-linux-musl/6.4.0/cc1obj
и занимает 17,6 МБ.
- Если вам не нужна оптимизация времени ссылки (LTO), вы можете удалить оболочку LTO и основные исполняемые файлы
lto-wrapper
и lto1
, которые занимают 700 КБ и 16,8 МБ соответственно.
Хотя оптимизация LTO может быть мощной, в большинстве приложений она может привести лишь к незначительным улучшениям скорости и размера (несколько процентов). Кроме того, вы должны подписаться на LTO, что не делается в большинстве приложений, поэтому он может быть хорошим кандидатом на удаление.
- Вы можете удалить внешний интерфейс Java,
gcj
, который, похоже, не работает в любом случае. Он расположен на /usr/bin/x86_64-alpine-linux-musl-gcj
, и весит 812kb.
Если удалить их и сжать получившееся изображение, оно уменьшится до 64,4 МБ, что все еще значительно больше. Возможно, вам удастся еще больше сжать, удалив дополнительные файлы, но тогда вы потеряете некоторые желаемые функции и получите менее привлекательный компромисс.
Вот пример Dockerfile:
FROM alpine:3.8
RUN set -ex && \
apk add --no-cache gcc musl-dev
RUN set -ex && \
rm -f /usr/libexec/gcc/x86_64-alpine-linux-musl/6.4.0/cc1obj && \
rm -f /usr/libexec/gcc/x86_64-alpine-linux-musl/6.4.0/lto1 && \
rm -f /usr/libexec/gcc/x86_64-alpine-linux-musl/6.4.0/lto-wrapper && \
rm -f /usr/bin/x86_64-alpine-linux-musl-gcj
Протестировано с использованием:
sudo docker image build --squash -t alpine-gcc-minimal .