Изображения докера ГЛАВНЫМ ОБРАЗОМ ОГРОМНЫ, и я мечтаю о крошечном, действительно крошечном изображении nginx.
Идея состоит в том, чтобы скомпилировать его и создать изображение Докера с только nginx
двоичный файл, файлы конфигурации, необходимые общие библиотеки, и т.д.
Таким образом, вопрос: как выяснить, который совместно использовал библиотеки, в которых будет нужно скомпилированное приложение?
Зная список, я попробовал бы, делают папку со всеми зависимостями связанной и поставляют его как самый маленький контейнер Докера.
Это не только о nginx, а скорее универсальном рецепте о том, как обработать эти случаи. Возможно, некоторая кросс-компиляция tecnhiques может помочь здесь?
Итак, вопрос в том, как выяснить, какие разделяемые библиотеки 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)
В отношении того, является ли это разумным средством сделать вырезанный докер-контейнер еще в воздухе. Я подозреваю, что есть еще много битов, которые вам нужно будет рассмотреть, прежде чем вы заставите это работать.
.Контейнер nginx тяжелый, так как происходит от установки базовой ОС, а над ним установлены nginx и все необходимые зависимости и модули. Но эта базовая ОС может быть совместно использована с другими контейнерами, что делает "расточительность" менее заметной с каждым разом по мере роста использования контейнеров.
Также поддерживается рецепт сборки (т.е. когда вам нужно больше модулей или обновлений безопасности, которые могут изменять зависимости). может быть проще с помощью простого Dockerfile, использующего базовый образ ОС и устанавливающего пакет nginx из репозиториев, чем бит за битом выбирать то, что вам нужно.
В любом случае, если вы хотите собрать свой собственный (миниатюрный) базовый образ ОС, у вас есть инструкции в https://docs.docker.com/articles/baseimages/ вместе с предложениями по существующим минимальным.
.