欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

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

前言

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

Docker安裝nginx服務

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

  • 首先,找一個空文件夾,把前端項目打包后的dist文件夾拷貝到根目錄
  • 在根目錄下配置nginx.conf如下,代理接口的關鍵點在于proxy_pass:
server {
  listen 80;
  location / {
    root   /usr/share/nginx/html;
    index  index.html index.htm;
    try_files $uri $uri/ /index.html;
  }
  location /api/ {
    #這里假設接口地址為http://127.0.0.1:8081
    #前端以/api/開頭的接口將被代理到http://127.0.0.1:8081
    proxy_pass http://127.0.0.1:8081;
  }
}
  • 同時在根目錄下面創(chuàng)建一份Dockerfile文件,寫入以下內容
# 拉取nginx鏡像
FROM nginx:stable-alpine
# 把本地的dist文件夾下所有內容復制到/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
# 此時相當于在docker容器里的/etc/nginx/conf.d路徑下,運行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運行鏡像,--name nginx-server設置docker容器的名稱,-p 8080:8080指將容器內8080端口映射到宿主機的8080端口,my-nginx就是之前打包好的鏡像

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

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

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

  • nginx.conf重命名為nginx.template(名字可以隨便起,不重命名也行,這里為了表示這是一個模板),修改內容如下
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/ {
    #新增一個代理接口,方便演示注入多個變量,或者用${URL_2}也行
    proxy_pass $URL_2;
  }
}

2.同時Dockerfile也有修改一下

FROM nginx:stable-alpine
COPY dist/ /usr/share/nginx/html
#這里改成將nginx配置模板復制過去
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;'

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

  • 重新執(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運行鏡像,這里我們新增了-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查看容器里打印的內容,因為之前已經(jīng)提前寫好cat default.conf,所以執(zhí)行完命令后,可以直接在 控制臺看到打印出的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;
  }
}

總結

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

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

相關文章

  • mac docker如何修改daemon.json文件

    mac docker如何修改daemon.json文件

    這篇文章主要介紹了mac docker如何修改daemon.json文件問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-08-08
  • CentOS7.2下安裝docker容器教程

    CentOS7.2下安裝docker容器教程

    Docker是一個開源的軟件部署工具,是輕量級的應用容器框架,它可以讓創(chuàng)建和管理 CentOS容器變得簡單。容器就像是輕量級的虛擬機,并且可以以毫秒級的速度來啟動或停止。Docker 幫助系統(tǒng)管理員和程序員在容器中開發(fā)應用程序,并且可以擴展到成千上萬的節(jié)點。
    2018-03-03
  • Docker 運行多個Springboot的詳細教程

    Docker 運行多個Springboot的詳細教程

    這篇文章主要介紹了Docker 運行多個Springboot的詳細教程,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-12-12
  • docker在win10家庭版下構建laravel開發(fā)環(huán)境的教程詳解

    docker在win10家庭版下構建laravel開發(fā)環(huán)境的教程詳解

    這篇文章主要介紹了docker在win10家庭版下構建laravel開發(fā)環(huán)境,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-06-06
  • windows?10安裝和使用docker

    windows?10安裝和使用docker

    這篇文章介紹了windows?10安裝和使用docker的方法,文中通過示例代碼介紹的非常詳細。對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-07-07
  • 使用Nexus創(chuàng)建Docker倉庫的方法步驟

    使用Nexus創(chuàng)建Docker倉庫的方法步驟

    這篇文章主要介紹了使用Nexus創(chuàng)建Docker倉庫的方法步驟,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-12-12
  • Docker?Desktop?啟用?Kubernetes?失敗后處理方案

    Docker?Desktop?啟用?Kubernetes?失敗后處理方案

    ?在setting -> Kubernetes 中,選中 Enable Kubernetes 后,長時間顯示 Starting ...? ,在Images中顯示幾個自動下載的鏡像后,顯示 Start Kubernetes failed,這篇文章主要介紹了Docker?Desktop啟用Kubernetes失敗后處理方法,需要的朋友可以參考下
    2023-08-08
  • 基于Docker的可持續(xù)交付問題

    基于Docker的可持續(xù)交付問題

    這篇文章主要介紹了基于Docker的可持續(xù)交付問題,本文章系列中主要結合CI持續(xù)集成的工具,把這個過程完全的自動化,以及智能化的過程。當然,使用的技術棧主要是Spring?Boot,具體內容詳情跟隨小編一起看看吧
    2022-01-01
  • idea整合docker快速部署springboot應用的詳細過程

    idea整合docker快速部署springboot應用的詳細過程

    這篇文章主要介紹了idea整合docker快速部署springboot應用,文中給大家提到關于安裝docker步驟,idea連接遠程docker的方法,需要的朋友可以參考下
    2021-10-10
  • ubuntu docker搭建Hadoop集群環(huán)境的方法

    ubuntu docker搭建Hadoop集群環(huán)境的方法

    這篇文章主要介紹了ubuntu docker搭建Hadoop集群環(huán)境,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-06-06

最新評論