Скомпилируйте nginx со связанными общими библиотеками для Докера для создания крошечного изображения

Изображения докера ГЛАВНЫМ ОБРАЗОМ ОГРОМНЫ, и я мечтаю о крошечном, действительно крошечном изображении nginx.

Идея состоит в том, чтобы скомпилировать его и создать изображение Докера с только nginx двоичный файл, файлы конфигурации, необходимые общие библиотеки, и т.д.

Таким образом, вопрос: как выяснить, который совместно использовал библиотеки, в которых будет нужно скомпилированное приложение?

Зная список, я попробовал бы, делают папку со всеми зависимостями связанной и поставляют его как самый маленький контейнер Докера.


Это не только о nginx, а скорее универсальном рецепте о том, как обработать эти случаи. Возможно, некоторая кросс-компиляция tecnhiques может помочь здесь?

0
задан 7 October 2014 в 02:37
2 ответа

Итак, вопрос в том, как выяснить, какие разделяемые библиотеки a Скомпилированное приложение вам понадобится?

ldd - это инструмент, который вы ищете. Например, вот библиотеки nginx-1.1.19 на Ubuntu 12.04 LTS ссылаются на:

$ which nginx
/usr/sbin/nginx
$ ldd /usr/sbin/nginx
    linux-vdso.so.1 =>  (0x00007fff8fe50000)
    libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007f02ecdfb000)
    libcrypt.so.1 => /lib/x86_64-linux-gnu/libcrypt.so.1 (0x00007f02ecbc2000)
    libpam.so.0 => /lib/x86_64-linux-gnu/libpam.so.0 (0x00007f02ec9b3000)
    libexpat.so.1 => /lib/x86_64-linux-gnu/libexpat.so.1 (0x00007f02ec789000)
    libpcre.so.3 => /lib/x86_64-linux-gnu/libpcre.so.3 (0x00007f02ec54c000)
    libssl.so.1.0.0 => /lib/x86_64-linux-gnu/libssl.so.1.0.0 (0x00007f02ec2ed000)
    libcrypto.so.1.0.0 => /lib/x86_64-linux-gnu/libcrypto.so.1.0.0 (0x00007f02ebf12000)
    libz.so.1 => /lib/x86_64-linux-gnu/libz.so.1 (0x00007f02ebcfb000)
    libxml2.so.2 => /usr/lib/x86_64-linux-gnu/libxml2.so.2 (0x00007f02eb99e000)
    libxslt.so.1 => /usr/lib/x86_64-linux-gnu/libxslt.so.1 (0x00007f02eb762000)
    libexslt.so.0 => /usr/lib/x86_64-linux-gnu/libexslt.so.0 (0x00007f02eb54d000)
    libgd.so.2 => /usr/lib/x86_64-linux-gnu/libgd.so.2 (0x00007f02eb306000)
    libGeoIP.so.1 => /usr/lib/libGeoIP.so.1 (0x00007f02eb0d1000)
    libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f02ead12000)
    /lib64/ld-linux-x86-64.so.2 (0x00007f02ed020000)
    libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007f02eab0d000)
    libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007f02ea811000)
    libgcrypt.so.11 => /lib/x86_64-linux-gnu/libgcrypt.so.11 (0x00007f02ea591000)
    libXpm.so.4 => /usr/lib/x86_64-linux-gnu/libXpm.so.4 (0x00007f02ea380000)
    libjpeg.so.8 => /usr/lib/x86_64-linux-gnu/libjpeg.so.8 (0x00007f02ea130000)
    libfontconfig.so.1 => /usr/lib/x86_64-linux-gnu/libfontconfig.so.1 (0x00007f02e9ef9000)
    libfreetype.so.6 => /usr/lib/x86_64-linux-gnu/libfreetype.so.6 (0x00007f02e9c5d000)
    libpng12.so.0 => /lib/x86_64-linux-gnu/libpng12.so.0 (0x00007f02e9a35000)
    libgpg-error.so.0 => /lib/x86_64-linux-gnu/libgpg-error.so.0 (0x00007f02e9830000)
    libX11.so.6 => /usr/lib/x86_64-linux-gnu/libX11.so.6 (0x00007f02e94fb000)
    libxcb.so.1 => /usr/lib/x86_64-linux-gnu/libxcb.so.1 (0x00007f02e92dc000)
    libXau.so.6 => /usr/lib/x86_64-linux-gnu/libXau.so.6 (0x00007f02e90d9000)
    libXdmcp.so.6 => /usr/lib/x86_64-linux-gnu/libXdmcp.so.6 (0x00007f02e8ed3000)

В отношении того, является ли это разумным средством сделать вырезанный докер-контейнер еще в воздухе. Я подозреваю, что есть еще много битов, которые вам нужно будет рассмотреть, прежде чем вы заставите это работать.

.
2
ответ дан 4 December 2019 в 12:30

Контейнер nginx тяжелый, так как происходит от установки базовой ОС, а над ним установлены nginx и все необходимые зависимости и модули. Но эта базовая ОС может быть совместно использована с другими контейнерами, что делает "расточительность" менее заметной с каждым разом по мере роста использования контейнеров.

Также поддерживается рецепт сборки (т.е. когда вам нужно больше модулей или обновлений безопасности, которые могут изменять зависимости). может быть проще с помощью простого Dockerfile, использующего базовый образ ОС и устанавливающего пакет nginx из репозиториев, чем бит за битом выбирать то, что вам нужно.

В любом случае, если вы хотите собрать свой собственный (миниатюрный) базовый образ ОС, у вас есть инструкции в https://docs.docker.com/articles/baseimages/ вместе с предложениями по существующим минимальным.

.
1
ответ дан 4 December 2019 в 12:30

Теги

Похожие вопросы