濮阳杆衣贸易有限公司

主頁(yè) > 知識(shí)庫(kù) > nginx在docker容器中自動(dòng)生成配置文件

nginx在docker容器中自動(dòng)生成配置文件

熱門標(biāo)簽:智能電話機(jī)器人線路 廣州電銷機(jī)器人系統(tǒng)圖 長(zhǎng)沙開(kāi)福怎么申請(qǐng)400電話 江蘇電銷外呼防封系統(tǒng)是什么 金融行業(yè)外呼線路 東莞人工智能電銷機(jī)器人供應(yīng)商 高德地圖標(biāo)注無(wú)營(yíng)業(yè)執(zhí)照 百度地圖標(biāo)注要不要錢 賀州市地圖標(biāo)注app

公司在搭建docker自動(dòng)化部署時(shí),需要制作一個(gè)nginx鏡像在其docker run時(shí)通過(guò)外部指定環(huán)境變量使得容器中的配置文件自動(dòng)生成,不需要再到容器里改配置文件。

實(shí)現(xiàn)思路

最后運(yùn)行的命令大概是這樣:

docker run -d -p 80:80 -e xxx=xx 鏡像名稱 鏡像中腳本路徑

這里的腳本會(huì)代替dockerfile中的CMD指令,所以我們要構(gòu)建一個(gè)自動(dòng)生成且啟動(dòng)nginx的shell腳本。

#!/bin/bash

#從環(huán)境變量里面獲取lt開(kāi)頭,為了與其他環(huán)境變量區(qū)別開(kāi),例如lt_analysis=172.17.0.1:8083
result=""
for a in $(env | grep ^lt)
do
 OLD_IFS="$IFS"
 IFS="_"
 arr=($a)
 b=${arr[1]}
 IFS="="
 arr=($b)
 IFS="$OLD_IFS"
 result="${result}
  location /${arr[0]}/ {
    proxy_pass  http://${arr[1]}/${arr[0]}/;
    proxy_connect_timeout 90;
    proxy_send_timeout 90;
    proxy_read_timeout 90;
  }"
done
#將nginx配置文件中nginx_conf中置換成變量result
sed -i "s|nginx_conf|$(echo ${result})|g" /etc/nginx/nginx.conf
cd /usr/sbin
./nginx

需要說(shuō)明的一點(diǎn)是業(yè)務(wù)中并不需要將整個(gè)配置文件生成,只需要將其中l(wèi)ocation生成然后替換原配置文件中標(biāo)記的位置,下面就是原配置文件標(biāo)記的位置。

http {
  ...
  
  server {
    ...

    location / {
      root  html;
      index index.html index.htm;
    }

    nginx_conf

    #error_page 404       /404.html;
    ...

我以為將這個(gè)shell腳本和默認(rèn)的配置文件放入nginx的dockerfile鏡像中,然后就成功了,但是...運(yùn)行上述命令之后容器沒(méi)有起來(lái),查看容器日志,出來(lái)的信息卻是***Syntax error: “(” unexpected***。我的shell腳本在centos上經(jīng)過(guò)測(cè)試是可以運(yùn)行的,那么為什么會(huì)報(bào)這個(gè)錯(cuò)呢? 經(jīng)過(guò)排查,原來(lái)是dockerfile使用基礎(chǔ)鏡像是官方nginx,官方的鏡像使用Ubuntu不再使用bash來(lái)而是dash執(zhí)行shell腳本,真是個(gè)坑 。沒(méi)辦法我只好修改dockerfile,下面就是使用基礎(chǔ)鏡像centos。

FROM centos

ENV NGINX_VERSION 1.10.3
ENV OPENSSL_VERSION 1.0.2k
ENV PCRE_VERSION 8.40
ENV ZLIB_VERSION 1.2.11
ENV BUILD_ROOT /usr/local/xx/nginx

# 為了減小最終生成的鏡像占用的空間,這里沒(méi)有執(zhí)行yum update命令,可能不是好的實(shí)踐
# 為了加快構(gòu)建速度,這里使用了163的安裝源
#RUN yum -y update \

RUN yum -y install curl \

  && mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup \

  && curl http://mirrors.163.com/.help/CentOS7-Base-163.repo -o /etc/yum.repos.d/CentOS7-Base-163.repo \ 
  && yum -y install gcc gcc-c++ make perl zip unzip \

  && mkdir -p $BUILD_ROOT \

  && cd $BUILD_ROOT \

  && curl https://ftp.pcre.org/pub/pcre/pcre-$PCRE_VERSION.zip -o $BUILD_ROOT/pcre-$PCRE_VERSION.zip \

  && curl https://www.openssl.org/source/openssl-$OPENSSL_VERSION.tar.gz -o $BUILD_ROOT/openssl-$OPENSSL_VERSION.tar.gz \

  && curl http://www.zlib.net/zlib-$ZLIB_VERSION.tar.gz -o $BUILD_ROOT/zlib-$ZLIB_VERSION.tar.gz \

  && curl https://nginx.org/download/nginx-$NGINX_VERSION.tar.gz -o $BUILD_ROOT/nginx-$NGINX_VERSION.tar.gz \

  && tar vxzf nginx-$NGINX_VERSION.tar.gz \

  && unzip pcre-$PCRE_VERSION.zip \

  && tar vxfz zlib-$ZLIB_VERSION.tar.gz \

  && tar vxfz openssl-$OPENSSL_VERSION.tar.gz \

  && cd nginx-$NGINX_VERSION \

  && BUILD_CONFIG="\

    --prefix=/etc/nginx \

    --sbin-path=/usr/sbin/nginx \

    --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 \

    --with-openssl=$BUILD_ROOT/openssl-$OPENSSL_VERSION \

    --with-pcre=$BUILD_ROOT/pcre-$PCRE_VERSION \

    --with-zlib=$BUILD_ROOT/zlib-$ZLIB_VERSION \

    --with-http_ssl_module \

    --with-http_v2_module \ 
    --with-threads \

    " \

  && mkdir -p /var/cache/nginx \

  && ./configure $BUILD_CONFIG \

  && make && make install \

  && rm -rf $BUILD_ROOT \

  && yum -y remove gcc gcc-c++ make perl zip unzip \

  && yum clean all

#替換nginx默認(rèn)文件
COPY nginx.conf /etc/nginx/
#添加自動(dòng)生成配置文件的shell腳本
COPY 腳本名稱 /root/

#暴露端口
EXPOSE 80 443

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

提醒:docker容器不支持后臺(tái)運(yùn)行,當(dāng)命令執(zhí)行之后,容器也會(huì)自然退出,這里我們需要將nginx配置文件設(shè)置一下

#user nobody;
worker_processes 1;

#error_log logs/error.log;
#error_log logs/error.log notice;
#error_log logs/error.log info;

#pid    logs/nginx.pid;
daemon off;  //這里添加,關(guān)閉后臺(tái)運(yùn)行
events {
  worker_connections 1024;
}


http {

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

標(biāo)簽:北京 廊坊 永州 張家界 洛陽(yáng) 玉樹(shù) 滄州 松原

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《nginx在docker容器中自動(dòng)生成配置文件》,本文關(guān)鍵詞  nginx,在,docker,容器,中,自動(dòng)生成,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問(wèn)題,煩請(qǐng)?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無(wú)關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《nginx在docker容器中自動(dòng)生成配置文件》相關(guān)的同類信息!
  • 本頁(yè)收集關(guān)于nginx在docker容器中自動(dòng)生成配置文件的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章
    满洲里市| 商河县| 德昌县| 海口市| 蒙自县| 油尖旺区| 江都市| 天气| 昭平县| 天水市| 娱乐| 沂南县| 民勤县| 四子王旗| 左贡县| 邢台县| 新巴尔虎右旗| 紫阳县| 正蓝旗| 定南县| 毕节市| 合作市| 泽库县| 岑巩县| 三原县| 迭部县| 南郑县| 西安市| 芒康县| 潮州市| 于都县| 绥芬河市| 灵寿县| 古蔺县| 苏尼特右旗| 宁城县| 宜阳县| 南木林县| 寿光市| 襄城县| 米泉市|