где я могу найти nginx (стабильный) для докера? - PullRequest
0 голосов
/ 09 марта 2019

Я пытаюсь создать dockerfile, который содержит последнюю стабильную версию Nginx, скомпилированную с модулем vts .... есть большая проблема, что у меня не получается найти автомобильную ссылку, когда я помещаю ее в файл докерабудет загружать и устанавливать последнюю стабильную версию nginx. Я могу указать только такую ​​версию, как 1.14.2. Есть ли способ, которым я могу изменить свой dockerfile, чтобы он всегда загружал последнюю версию, а не только одну версию?

это мой докер-файл

FROM debian:stretch-slim




RUN apt-get update && \
    apt-get install -y git wget libreadline-dev libncurses5-dev libpcre3-    dev libssl-dev perl make build-essential zlib1g-dev && \
    cd /tmp/ && \
    wget http://nginx.org/download/nginx-1.14.2.tar.gz && \
    git clone git://github.com/vozlt/nginx-module-vts.git && \
    tar zxvf nginx-1.14.2.tar.gz && \
    rm -f nginx-1.14.2.tar.gz && \
    cd nginx-1.14.2 && \
    ./configure --prefix=/tmp/nginx-1.14.2 --sbin-path=/usr/sbin/nginx --    modules-path=/usr/lib/nginx/modules --conf-path=/etc/nginx/nginx.conf \
    --error-log-path=/var/log/nginx/error.log --http-log-path=/var/log/nginx/access.log --pid-path=/var/run/nginx.pid \
    --lock-path=/var/run/nginx.lock --http-client-body-temp-    path=/var/cache/nginx/client_temp --http-proxy-temp-    path=/var/cache/nginx/proxy_temp \
    --http-fastcgi-temp-path=/var/cache/nginx/fastcgi_temp --http-uwsgi-    temp-path=/var/cache/nginx/uwsgi_temp --http-scgi-temp-    path=/var/cache/nginx/scgi_temp \
    --user=nginx --group=nginx --with-compat --with-file-aio --with-    threads --with-http_addition_module --with-http_auth_request_module \
    --with-http_dav_module --with-http_flv_module --with-    http_gunzip_module --with-http_gzip_static_module --with-http_mp4_module \
    --with-http_random_index_module --with-http_realip_module --with-    http_secure_link_module --with-http_slice_module --with-http_ssl_module \
    --with-http_stub_status_module --with-http_sub_module --with-    http_v2_module --with-mail --with-mail_ssl_module --with-stream \
    --with-stream_realip_module --with-stream_ssl_module --with-    stream_ssl_preread_module \
    --with-cc-opt='-g -O2 -fdebug-prefix-map=/data/builder/debuild/nginx-    1.14.2/debian/debuild-base/nginx-1.14.2=. -specs=/usr/share/dpkg/no-pie-    compile.specs -fstack-protector-strong -Wformat -Werror=format-security -    Wp,-D_FORTIFY_SOURCE=2 -fPIC' \
    --with-ld-opt='-specs=/usr/share/dpkg/no-pie-link.specs -Wl,-z,relro -    Wl,-z,now -Wl,--as-needed -pie' \
    --add-module=/tmp/nginx-module-vts && \
    make && make install && \
    cp -f objs/nginx /usr/sbin/nginx && \
    apt-get clean && rm -rf /var/lib/apt/lists/*

CMD ["nginx", "-g", "daemon off;"] 

1 Ответ

2 голосов
/ 09 марта 2019

Если вы ищете простой способ продолжить использование стабильной версии во время компиляции nginx из исходного кода, поскольку для него нет единого прямого URL-адреса, то вы можете передать аргумент сборки в ваш Dockerfile, например: это:

...
ARG NGINX_STABLE_VERSION
RUN   wget http://nginx.org/download/nginx-${NGINX_STABLE_VERSION}.tar.gz
...

И выполните команду сборки, как показано ниже, чтобы продолжить загрузку версии nginx на основе переданного аргумента:

docker build --build-arg NGINX_STABLE_VERSION=1.14.2 .

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

Согласно nginx-module-vts changelog существует поддержка компиляции модуля как динамического модуля, так что вы можете сделать многоэтапную сборку, которая компилирует nginx с нужным вам модулем, а затем скопировать сгенерированный файл в изображение nginx с той же версией, чтобы он работал.

Стабильные изображения Nginx можно найти в здесь с тегом stable word.

Все, что вам нужно сделать сейчас, это изменить Dockerfile и заставить его использовать динамические модули, а затем добавить еще один этап для использования стабильного образа с новым модулем, созданным на первом этапе, и вы можете добавить аргумент во время построить например:

...
ARG NGINX_STABLE_VERSION
RUN   wget http://nginx.org/download/nginx-${NGINX_STABLE_VERSION}.tar.gz
...

И запустить сборку так:

docker build --build-arg NGINX_STABLE_VERSION=1.14.2 .


Обновление:

Nginx не предоставляет одну ссылку, которую вы можете использовать для получения стабильной версии каждый раз, так что вы можете перейти к разбору html страницы загрузки, как показано ниже, чтобы получать последнюю ссылку для загрузки стабильной версии:

Мы полагаемся на HTML-страницу, которая не является наиболее надежным решением в долгосрочной перспективе.

echo "http://nginx.org$(curl -s http://nginx.org/en/download.html | grep -oP 'Stable version.*?\K(/download/.*?tar.gz)')"

Выход:

http://nginx.org/download/nginx-1.14.2.tar.gz

В вашем Dockerfile это может быть так:

Убедитесь, что у вас установлен curl

RUN curl "http://nginx.org$(curl -s http://nginx.org/en/download.html | grep -oP 'Stable version.*?\K(/download/.*?tar.gz)')" --output nginx.tar.gz
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...