docker制作nginx+nginx-module-vts镜像基于alpine镜像

Posted gsls200808

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了docker制作nginx+nginx-module-vts镜像基于alpine镜像相关的知识,希望对你有一定的参考价值。

本文参考配置https://github.com/Parli/nginx-vts-docker 稍作修改

搜索到的docker镜像nginx版本比较低,为1.11,1.13,这里用的nginx版本为1.20.0

Dockerfile

FROM alpine:3.5

LABEL maintainer="eric@slant.co"

ENV NGINX_VERSION 1.22.0
ENV VTS_VERSION 0.2.1

RUN GPG_KEYS=B0F4253373F8F6F510D42178520A9993A1C052F8 \\
    && CONFIG="\\
        --prefix=/etc/nginx \\
        --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-http_ssl_module \\
        --with-http_realip_module \\
        --with-http_addition_module \\
        --with-http_sub_module \\
        --with-http_dav_module \\
        --with-http_flv_module \\
        --with-http_mp4_module \\
        --with-http_gunzip_module \\
        --with-http_gzip_static_module \\
        --with-http_random_index_module \\
        --with-http_secure_link_module \\
        --with-http_stub_status_module \\
        --with-http_auth_request_module \\
        --with-http_xslt_module=dynamic \\
        --with-http_image_filter_module=dynamic \\
        --with-http_geoip_module=dynamic \\
        --with-http_perl_module=dynamic \\
        --with-threads \\
        --with-stream \\
        --with-stream_ssl_module \\
        --with-stream_ssl_preread_module \\
        --with-stream_realip_module \\
        --with-stream_geoip_module=dynamic \\
        --with-http_slice_module \\
        --with-mail \\
        --with-mail_ssl_module \\
        --with-compat \\
        --with-file-aio \\
        --with-http_v2_module \\
                --add-module=/usr/src/nginx-module-vts-$VTS_VERSION \\
    " \\
    && addgroup -S nginx \\
    && adduser -D -S -h /var/cache/nginx -s /sbin/nologin -G nginx nginx \\
    && apk add --no-cache --virtual .build-deps \\
        gcc \\
        libc-dev \\
        make \\
        openssl-dev \\
        pcre-dev \\
        zlib-dev \\
        linux-headers \\
        curl \\
        gnupg \\
        libxslt-dev \\
        gd-dev \\
        geoip-dev \\
        perl-dev \\
    && curl -fSL http://nginx.org/download/nginx-$NGINX_VERSION.tar.gz -o nginx.tar.gz \\
    && curl -fSL http://nginx.org/download/nginx-$NGINX_VERSION.tar.gz.asc  -o nginx.tar.gz.asc \\
    && curl -fSL https://github.com/vozlt/nginx-module-vts/archive/v$VTS_VERSION.tar.gz  -o nginx-modules-vts.tar.gz \\
    && export GNUPGHOME="$(mktemp -d)" \\
    && found=''; \\
    for server in \\
        ha.pool.sks-keyservers.net \\
        hkp://keyserver.ubuntu.com:80 \\
        hkp://p80.pool.sks-keyservers.net:80 \\
        pgp.mit.edu \\
    ; do \\
        echo "Fetching GPG key $GPG_KEYS from $server"; \\
        gpg --keyserver "$server" --keyserver-options timeout=10 --recv-keys "$GPG_KEYS" && found=yes && break; \\
    done; \\
    test -z "$found" && echo >&2 "error: failed to fetch GPG key $GPG_KEYS" && exit 1; \\
    gpg --batch --verify nginx.tar.gz.asc nginx.tar.gz \\
    && rm -r "$GNUPGHOME" nginx.tar.gz.asc \\
    && mkdir -p /usr/src \\
    && tar -zxC /usr/src -f nginx.tar.gz \\
    && tar -zxC /usr/src -f nginx-modules-vts.tar.gz \\
    && rm nginx.tar.gz nginx-modules-vts.tar.gz \\
    && cd /usr/src/nginx-$NGINX_VERSION \\
    && ./configure $CONFIG --with-debug \\
    && make -j$(getconf _NPROCESSORS_ONLN) \\
    && mv objs/nginx objs/nginx-debug \\
    && mv objs/ngx_http_xslt_filter_module.so objs/ngx_http_xslt_filter_module-debug.so \\
    && mv objs/ngx_http_image_filter_module.so objs/ngx_http_image_filter_module-debug.so \\
    && mv objs/ngx_http_geoip_module.so objs/ngx_http_geoip_module-debug.so \\
    && mv objs/ngx_http_perl_module.so objs/ngx_http_perl_module-debug.so \\
    && mv objs/ngx_stream_geoip_module.so objs/ngx_stream_geoip_module-debug.so \\
    && ./configure $CONFIG \\
    && make -j$(getconf _NPROCESSORS_ONLN) \\
    && make install \\
    && rm -rf /etc/nginx/html/ \\
    && mkdir /etc/nginx/conf.d/ \\
    && mkdir -p /usr/share/nginx/html/ \\
    && install -m644 html/index.html /usr/share/nginx/html/ \\
    && install -m644 html/50x.html /usr/share/nginx/html/ \\
    && install -m755 objs/nginx-debug /usr/sbin/nginx-debug \\
    && install -m755 objs/ngx_http_xslt_filter_module-debug.so /usr/lib/nginx/modules/ngx_http_xslt_filter_module-debug.so \\
    && install -m755 objs/ngx_http_image_filter_module-debug.so /usr/lib/nginx/modules/ngx_http_image_filter_module-debug.so \\
    && install -m755 objs/ngx_http_geoip_module-debug.so /usr/lib/nginx/modules/ngx_http_geoip_module-debug.so \\
    && install -m755 objs/ngx_http_perl_module-debug.so /usr/lib/nginx/modules/ngx_http_perl_module-debug.so \\
    && install -m755 objs/ngx_stream_geoip_module-debug.so /usr/lib/nginx/modules/ngx_stream_geoip_module-debug.so \\
    && ln -s ../../usr/lib/nginx/modules /etc/nginx/modules \\
    && strip /usr/sbin/nginx* \\
    && strip /usr/lib/nginx/modules/*.so \\
    && rm -rf /usr/src/nginx-$NGINX_VERSION \\
    \\
    # Bring in gettext so we can get `envsubst`, then throw
    # the rest away. To do this, we need to install `gettext`
    # then move `envsubst` out of the way so `gettext` can
    # be deleted completely, then move `envsubst` back.
    && apk add --no-cache --virtual .gettext gettext \\
    && mv /usr/bin/envsubst /tmp/ \\
    \\
    && runDeps="$( \\
        scanelf --needed --nobanner /usr/sbin/nginx /usr/lib/nginx/modules/*.so /tmp/envsubst \\
            | awk ' gsub(/,/, "\\nso:", $2); print "so:" $2 ' \\
            | sort -u \\
            | xargs -r apk info --installed \\
            | sort -u \\
    )" \\
    && apk add --no-cache --virtual .nginx-rundeps $runDeps \\
    && apk del .build-deps \\
    && apk del .gettext \\
    && mv /tmp/envsubst /usr/local/bin/ \\
    \\
    # forward request and error logs to docker log collector
    && ln -sf /dev/stdout /var/log/nginx/access.log \\
    && ln -sf /dev/stderr /var/log/nginx/error.log

COPY nginx.conf /etc/nginx/nginx.conf
COPY default.conf /etc/nginx/conf.d/default.conf

EXPOSE 80 443

STOPSIGNAL SIGTERM

CMD "nginx"

nginx.conf

daemon off;
user  nginx;
worker_processes  1;

error_log  /var/log/nginx/error.log warn;
pid        /var/run/nginx.pid;

events 
    worker_connections  1024;


http 
    # Basic configuration for vts module
    vhost_traffic_status_zone shared:vhost_traffic_status:10m;

    include       /etc/nginx/mime.types;
    default_type  application/octet-stream;

    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';

    access_log  /var/log/nginx/access.log  main;

    sendfile        on;

    keepalive_timeout  65;


    include /etc/nginx/conf.d/*.conf;

default.conf

server 
    listen       80;
    server_name  localhost;

    #charset koi8-r;
    #access_log  /var/log/nginx/log/host.access.log  main;

    location / 
        root   /usr/share/nginx/html;
        index  index.html index.htm;
    
    
    location /status 
        vhost_traffic_status_display;
        vhost_traffic_status_display_format html;
    

    #error_page  404              /404.html;

    # redirect server error pages to the static page /50x.html
    #
    error_page   500 502 503 504  /50x.html;
    location = /50x.html 
        root   /usr/share/nginx/html;
    

    # proxy the php scripts to Apache listening on 127.0.0.1:80
    #
    #location ~ \\.php$ 
    #    proxy_pass   http://127.0.0.1;
    #

    # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
    #
    #location ~ \\.php$ 
    #    root           html;
    #    fastcgi_pass   127.0.0.1:9000;
    #    fastcgi_index  index.php;
    #    fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name;
    #    include        fastcgi_params;
    #

    # deny access to .htaccess files, if Apache's document root
    # concurs with nginx's one
    #
    #location ~ /\\.ht 
    #    deny  all;
    #

构建

docker build -t nginx-vts:1.20.0 .

运行

docker run -d -p 80:80 nginx-vts:1.20.0

以上是关于docker制作nginx+nginx-module-vts镜像基于alpine镜像的主要内容,如果未能解决你的问题,请参考以下文章

docker制作nginx+nginx-module-vts镜像基于alpine镜像

玩转docker+nginx : 局域网制作宝塔面板docker镜像,并导出使用

玩转docker+nginx : 局域网制作宝塔面板docker镜像,并导出使用

Docker镜像管理2之nginx镜像制作

docker 分布式 lnmp 镜像制作

docker 分布式 lnmp 镜像制作