Без дистрибутива
Google предоставляет инструкции и инструменты для создания образов без дистрибутива.
Образы «без дистрибутивов» содержат только ваше приложение и его зависимости времени выполнения. Они не содержат менеджеров пакетов, оболочек или каких-либо других программ, которые вы ожидаете найти в стандартном дистрибутиве Linux.
Зачем мне использовать образы без дистрибутива?
Ограничение содержимого вашего контейнера времени выполнения только тем, что необходимо вашему приложению, - это лучший метод, применяемый Google и другими техническими гигантами, которые уже много лет используют контейнеры в производственной среде. Он улучшает соотношение сигнал / шум сканеров (например, CVE) и снижает бремя установления происхождения до того, что вам нужно.
Если ваше приложение представляет собой скомпилированный двоичный файл, вы можете обойтись одним двоичным файлом плюс разделяемыми библиотеками, с которыми он связан. Если вы ограничите библиотеки, которые вы связываете, вам может понадобиться только пара. Вот, например, то, что минимальная программа на C, скомпилированная со ссылками на gcc, на моей машине:
$ ldd basic-program
linux-vdso.so.1 (0x00007fffd3fa2000)
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f2e4611b000)
/lib64/ld-linux-x86-64.so.2 (0x00007f2e4670e000)
Черт возьми, вы даже можете статически связать всю программу и вообще не иметь никаких зависимостей.
Google предоставляет набор базовых изображений, ориентированных на разные языки:
У них есть только несколько основных файлов, намного меньше, чем то, что включает даже минимальный дистрибутив, такой как alpine, поскольку в нем все еще есть apk
менеджер пакетов, утилиты пользовательского пространства и т. Д. Вы используете их так же, как вы описываете в своем вопросе: как последний этап в многоступенчатой сборке.
FROM gcr.io/distroless/base
COPY --from=build /go/bin/app /
CMD ["/app"]
С нуля
Вы также можете пройти полный путь «сыроедение-жизнь-в-лесу» и создать окончательный образ FROM scratch
. Нет ничего чище, чем это. Абсолютно ничего, что ты не клал туда сам. Это маршрут
person
John Kugelman
schedule
11.07.2019