Skip to content

Подготовка контейнера nginx с модулями, на основе только исходного кода и официальных образов Docker

License

Ornstein89/docker-nginx-module-vts

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

17 Commits
 
 
 
 
 
 
 
 
 
 

Repository files navigation

License: MIT

Сборка Nginx с модулями в Docker

Проект предназначен для подготовки контейнеризованного nginx с модулями, на основе только исходного кода и официальных образов Docker. В данном репозитории продемонстрировано добавление модуля nginx-module-vts, предназначенного для получения метрик nginx, в т.ч. для prometheus. Однако приведённые подходы позволяют собирать контейнеры nginx с любыми модулями, как динамическими (обе приведённых методики), так и подключаемыми при сборке (Способ 2).

Демонстрация панели модуля nginx-module-vts

Образы в Docker Hub

Оглавление

Содержание репозитория

  • build_separate - каталог с Dockerfile для многоступенчатой сборки динамического модуля и nginx (Методика 1).
  • build_with_nginx - каталог с Dockerfile для сборки nginx с модулем в одном контейнере (Методика 2).

Методики

Способ 1. Двухступенчатая сборка динамического модуля и образа nginx

Преимущества:

  • ступени сборки просты по отдельности и не требуют высокой экспертизы,
  • нет необходимости воспроизводить сложный процесс сборки (и компактирования) всего контейнера nginx, можно использовать как основу компактный официальный образ nginx и дополнить его отдельно собранным модулем,
  • используется только исходный код (nginx OSS и модуля) и официальный образ nginx (в данном репозитории - nginx:1.24.0-alpine-slim), без сторонних пользовательских образов Docker Hub.

Недостатки:

  • необходимо соблюдать синхронность версий nginx и зависимостей в целевом и сборочном контейнерах.

Инструкция по сборке

  1. Перейти в каталог build_separate. Расположенный там Dockerfile содержит две ступени сборки:

    • на первой во временном сборочном образе alpine собирается динамический модуль nginx-module-vts из исходного кода со всеми необходимыми зависимостями,
    • на втором - модуль копируется в целевой контейнер (официальная сборка nginx:1.24.0-alpine-slim).

    При желании в Dockerfile можно изменить

    • тип дистрибутива linux (для обеих ступеней сборки должен быть одинаковый),
    • версию nginx в аргументе ARG_NGINX_VERSION (при этом образ nginx для финальной ступени сборки выбирать той же вресии!),
    • собираемые модули (организовать скачивание исходного кода и подключение модуля в ./configure ... --add-dynamic-module=...),
    • файлы конфигурации nginx.conf и default.conf.
  2. Собрать образ из Dockerfile.

    Ubuntu:

    sudo docker build -t ornstein89/nginx-1.24.0-module-vts-1 .

    WSL (Windows + WSL2 + Docker desktop):

    docker.exe build -t ornstein89/nginx-1.24.0-module-vts-1 .
  3. Запустить контейнер из собранного образа. Убедиться, что статистика, выдаваемая модулем nginx-module-vts, доступна по URL http://localhost/status.

    Ubuntu:

    sudo docker run --name nginx-1.24.0-module-vts-1 -p 80:80 -p 443:443 ornstein89/nginx-1.24.0-module-vts-1

    WSL (Windows + WSL2 + Docker desktop):

    docker.exe run --name nginx-1.24.0-module-vts-1 -p 80:80 -p 443:443 ornstein89/nginx-1.24.0-module-vts-1

Способ 2. Сборка nginx и модулей совместно в одном образе из исходного кода

Преимущества этого подхода:

  • используется только исходный код nginx и модулей, и официальный образ linux (в данном репозитории - alpine), без сторонних пользовательских образов Docker Hub.

Недостатки:

  • при сборке nginx из исходного кода сложно обеспечить компактность контейнера, сравнимую с официальными сборками; для уменьшения размера образа после сборки требуется высокая экспертность в дистрибутивах linux и зависимостях nginx.

Инструкция по сборке

  1. Перейти в каталог build_with_nginx. В Dockerfile в переменной NGINX_BUILD_VERSION задать желаемую версию nginx (на 30 апреля 2023 года - версия 1.24.0).

  2. Сборка образа nginx с модулем.

    Ubuntu:

    sudo docker build -t ornstein89/nginx-1.24.0-module-vts-2 .

    WSL (Windows + WSL2 + Docker desktop):

    docker.exe build -t ornstein89/nginx-1.24.0-module-vts-2 .
  3. Запуск. Убедиться, что статистика, выдаваемая модулем nginx-module-vts, доступна по URL http://localhost/status.

    Ubuntu:

    sudo docker run --name nginx-1.24.0-module-vts-2 ornstein89/nginx-1.24.0-module-vts-2

    WSL (Windows + WSL2 + Docker desktop):

    docker.exe run --name nginx-1.24.0-module-vts-2 ornstein89/nginx-1.24.0-module-vts-2

Диагностика и устранение неисправностей

  1. Диагностический запуск с переходом в терминал контейнера:

    Ubuntu:

    sudo docker run --name nginx_with_modules -a stdin -a stdout -it ornstein89/nginx_with_modules sh

    WSL (Windows + WSL2 + Docker desktop):

    docker.exe run --name nginx_with_modules -a stdin -a stdout -it ornstein89/nginx_with_modules sh

TODO

  • Использовать apk --virtual NAME add && apk del NAME для уменьшения объёма (350Мб → 100Мб).
  • Собирать динамический модуль на отдельном контейнере, а затем перенести на контейнер nginx.
  • Multi-stage build для метода 1.
  • Метод 2, перейти на основу из https://github.com/nginxinc/docker-nginx и https://hg.nginx.org/pkg-oss/, сократить объём образа.
  • Internationalization.
  • Compose для метода 1.

Источники

About

Подготовка контейнера nginx с модулями, на основе только исходного кода и официальных образов Docker

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published