最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

使用docker環(huán)境變量動(dòng)態(tài)配置nginx的問題小結(jié)

 更新時(shí)間:2022年06月07日 17:09:02   作者:ifreeOvO  
這篇文章主要介紹了使用docker環(huán)境變量動(dòng)態(tài)配置nginx,整個(gè)方案,采用的是通過docker run -e xxxx=xxx先往容器注入環(huán)境變量,然后進(jìn)一步通過envsubst指令將環(huán)境變量寫入到具體的文件當(dāng)中,實(shí)現(xiàn)動(dòng)態(tài)配置文件內(nèi)容,需要的朋友可以參考下

前言

前后端聯(lián)調(diào)接口時(shí),經(jīng)常會(huì)用到nginx反向代理來解決跨域問題。部署時(shí),同一份前端代碼有時(shí)候會(huì)根據(jù)開發(fā)環(huán)境不同,需要切換不同的后端接口地址進(jìn)行代理。 傳統(tǒng)方式是為每個(gè)環(huán)境都獨(dú)立部署一份nginx配置,但是多數(shù)情況下,這些配置里的內(nèi)容大體上相同,只有少數(shù)部分內(nèi)容需要修改,這時(shí)候我們就希望nginx配置能夠從docker中獲取環(huán)境變量,動(dòng)態(tài)設(shè)置有差異的那部分配置。本文將以代理接口地址為例,介紹下解決方案

Docker安裝nginx服務(wù)

我們先從配置一份靜態(tài)的nginx環(huán)境開始。

  • 首先,找一個(gè)空文件夾,把前端項(xiàng)目打包后的dist文件夾拷貝到根目錄
  • 在根目錄下配置nginx.conf如下,代理接口的關(guān)鍵點(diǎn)在于proxy_pass:
server {
  listen 80;
  location / {
    root   /usr/share/nginx/html;
    index  index.html index.htm;
    try_files $uri $uri/ /index.html;
  }
  location /api/ {
    #這里假設(shè)接口地址為http://127.0.0.1:8081
    #前端以/api/開頭的接口將被代理到http://127.0.0.1:8081
    proxy_pass http://127.0.0.1:8081;
  }
}
  • 同時(shí)在根目錄下面創(chuàng)建一份Dockerfile文件,寫入以下內(nèi)容
# 拉取nginx鏡像
FROM nginx:stable-alpine
# 把本地的dist文件夾下所有內(nèi)容復(fù)制到/usr/share/nginx/html下
COPY dist/ /usr/share/nginx/html
COPY nginx.conf /etc/nginx/conf.d
# 暴露80端口
EXPOSE 80
# 將docker環(huán)境下的命令行路徑切換到/etc/nginx/conf.d下執(zhí)行
WORKDIR /etc/nginx/conf.d
# 此時(shí)相當(dāng)于在docker容器里的/etc/nginx/conf.d路徑下,運(yùn)行nginx命令
ENTRYPOINT nginx -g 'daemon off;'
  • 執(zhí)行docker build . -t my-nginx命令將本地資源打包成鏡像,鏡像名為my-nginx

  • 執(zhí)行docker run --name nginx-server -d -p 8080:8080 my-nginx運(yùn)行鏡像,--name nginx-server設(shè)置docker容器的名稱,-p 8080:8080指將容器內(nèi)8080端口映射到宿主機(jī)的8080端口,my-nginx就是之前打包好的鏡像

  • 這時(shí)瀏覽器打開http://localhost:8080進(jìn)行訪問,接口就被代理到了http://127.0.0.1:8081

動(dòng)態(tài)配置nginx.conf

上一步我們使用靜態(tài)配置運(yùn)行了nginx服務(wù),現(xiàn)在我們來試試通過環(huán)境變量,動(dòng)態(tài)注入nginx配置。

  • nginx.conf重命名為nginx.template(名字可以隨便起,不重命名也行,這里為了表示這是一個(gè)模板),修改內(nèi)容如下
server {
  listen 80;
  location / {
    root   /usr/share/nginx/html;
    index  index.html index.htm;
    try_files $uri $uri/ /index.html;
  }
  location /api/ {
    #使用變量替換具體的地址,或者用${URL_1}也行
    proxy_pass $URL_1;
  }
  location /login/ {
    #新增一個(gè)代理接口,方便演示注入多個(gè)變量,或者用${URL_2}也行
    proxy_pass $URL_2;
  }
}

2.同時(shí)Dockerfile也有修改一下

FROM nginx:stable-alpine
COPY dist/ /usr/share/nginx/html
#這里改成將nginx配置模板復(fù)制過去
COPY nginx.template /etc/nginx/conf.d
EXPOSE 80
WORKDIR /etc/nginx/conf.d
#添加環(huán)境變量的寫入
ENTRYPOINT envsubst '$URL_1 $URL_2'  < nginx.template > default.conf && cat default.conf && nginx -g 'daemon off;'

這里實(shí)現(xiàn)環(huán)境變量注入的核心原理是利用linux自帶的envsubst指令。envsubst '$URL_1 $URL_2' < nginx.template作用是取環(huán)境的$URL_1$URL_2(此處變量名也可以寫成${URL_2},與模板保持一致即可)的值注入到nginx.template模板里對(duì)應(yīng)的位置,然后后半句> default.conf是將替換好變量后的模板內(nèi)容寫入到docker容器下default.conf文件里。cat default.conf這句話方便我們查看nginx的配置內(nèi)容,下文會(huì)提到。

  • 重新執(zhí)行docker build . -t new-nginx重新打包鏡像

  • 執(zhí)行docker run --name new-nginx-server -d -p 8080:8080 -e URL_1=http://127.0.0.1:8081 -e URL_2=http://127.0.0.1:8082 new-nginx運(yùn)行鏡像,這里我們新增了-e URL_1=http://127.0.0.1:8081 -e URL_2=http://127.0.0.1:8082,往容器里注入了環(huán)境變量,URL_1的值為http://127.0.0.1:8081,URL_2的值為http://127.0.0.1:8082

  • 然后我們使用docker logs -f new-nginx-server查看容器里打印的內(nèi)容,因?yàn)橹耙呀?jīng)提前寫好cat default.conf,所以執(zhí)行完命令后,可以直接在 控制臺(tái)看到打印出的nginx配置,之前的變量部分,已經(jīng)成功的被替換掉:

server {
  listen 80;
  location / {
    root   /usr/share/nginx/html;
    index  index.html index.htm;
    try_files $uri $uri/ /index.html;
  }
  location /api/ {
    proxy_pass http://127.0.0.1:8081;
  }
  location /login/ {
    proxy_pass http://127.0.0.1:8082;
  }
}

總結(jié)

整個(gè)方案,采用的是通過docker run -e xxxx=xxx先往容器注入環(huán)境變量,然后進(jìn)一步通過envsubst指令將環(huán)境變量寫入到具體的文件當(dāng)中,實(shí)現(xiàn)動(dòng)態(tài)配置文件內(nèi)容。 當(dāng)然這個(gè)方案依然有一些缺陷,例如當(dāng)需要替換的變量有成百上千時(shí),命令會(huì)很長(zhǎng),那時(shí)可能需要找一些其他方案進(jìn)行優(yōu)化。此外這里envsubst只是實(shí)現(xiàn)變量替換的其中一種方式, 其實(shí)實(shí)現(xiàn)類似的功能的方式有很多,例如利用nodejs配合ejs動(dòng)態(tài)寫入也是可以的,本文僅是提供一下大體的思路,具體實(shí)現(xiàn)可以結(jié)合自身項(xiàng)目靈活變通。

到此這篇關(guān)于使用docker環(huán)境變量動(dòng)態(tài)配置nginx的文章就介紹到這了,更多相關(guān)docker動(dòng)態(tài)配置nginx內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Docker部署Django應(yīng)用的示例

    Docker部署Django應(yīng)用的示例

    這篇文章主要介紹了Docker部署Django應(yīng)用的示例,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2018-08-08
  • 把jar包變成docker容器的方法

    把jar包變成docker容器的方法

    在本篇文章里小編給各位分享的是關(guān)于把jar包變成docker容器的方法,有需要的朋友們可以學(xué)習(xí)下。
    2020-03-03
  • docker如何將jar包生成鏡像并將宿主機(jī)目錄掛載

    docker如何將jar包生成鏡像并將宿主機(jī)目錄掛載

    這篇文章主要介紹了docker如何將jar包生成鏡像并將宿主機(jī)目錄掛載問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-08-08
  • 基于docker安裝mariadb配置過程解析

    基于docker安裝mariadb配置過程解析

    這篇文章主要介紹了基于docker安裝mariadb配置過程解析,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-10-10
  • docker容器啟動(dòng)失敗如何查看日志

    docker容器啟動(dòng)失敗如何查看日志

    這篇文章主要介紹了docker容器啟動(dòng)失敗如何查看日志問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-05-05
  • docker修改容器的端口、容器名、映射地址以及注意事項(xiàng)

    docker修改容器的端口、容器名、映射地址以及注意事項(xiàng)

    在日常的docker運(yùn)維中,經(jīng)常遇到修改容器的端口、容器名、映射地址等信息,這篇文章主要給大家介紹了關(guān)于docker修改容器的端口、容器名、映射地址以及注意事項(xiàng)的相關(guān)資料,需要的朋友可以參考下
    2022-08-08
  • 三款Docker圖形化工具優(yōu)缺點(diǎn)對(duì)比

    三款Docker圖形化工具優(yōu)缺點(diǎn)對(duì)比

    大家好,本篇文章主要講的是三款Docker圖形化工具優(yōu)缺點(diǎn)對(duì)比,感興趣的同學(xué)趕快來看一看吧,對(duì)你有幫助的話記得收藏一下
    2022-01-01
  • 基于Docker+Selenium Grid的測(cè)試技術(shù)應(yīng)用示例代碼

    基于Docker+Selenium Grid的測(cè)試技術(shù)應(yīng)用示例代碼

    Selenium Grid允許我們?cè)诙嗯_(tái)計(jì)算機(jī)上并行運(yùn)行測(cè)試,并集中管理不同的瀏覽器版本和瀏覽器配置。這篇文章給大家介紹基于Docker+Selenium Grid的測(cè)試技術(shù)應(yīng)用示例代碼,需要的朋友參考下吧
    2021-08-08
  • Docker使用Link在容器之間建立連接

    Docker使用Link在容器之間建立連接

    這篇文章主要介紹了Docker使用Link在容器之間建立連接的相關(guān)資料,需要的朋友可以參考下
    2016-10-10
  • 使用docker-compose部署mysql的完整步驟

    使用docker-compose部署mysql的完整步驟

    Compose是用于定義和運(yùn)行多容器Docker應(yīng)用程序的工具,通過Compose可以使用YAML文件來配置應(yīng)用程序的服務(wù),下面這篇文章主要給大家介紹了關(guān)于使用docker-compose部署mysql的相關(guān)資料,需要的朋友可以參考下
    2022-08-08

最新評(píng)論

连城县| 鄂尔多斯市| 安塞县| 灵武市| 德阳市| 金塔县| 洛扎县| 左云县| 老河口市| 枣庄市| 梓潼县| 瑞安市| 乐安县| 获嘉县| 新绛县| 榆树市| 墨竹工卡县| 金塔县| 香港| 兴隆县| 托克托县| 寿阳县| 乌兰浩特市| 孝感市| 林周县| 房产| 平舆县| 镇宁| 阿克苏市| 和田市| 安吉县| 赞皇县| 鱼台县| 山丹县| 和硕县| 历史| 亚东县| 吴江市| 苍山县| 永靖县| 河曲县|