docker中通過nginx+confd動(dòng)態(tài)生成配置的解決方案
當(dāng)我們項(xiàng)目越來越多時(shí)手動(dòng)去服務(wù)器修改nginx配置是一件很麻煩而且可能出錯(cuò)的事情。我們可以通過nginx+confd+配置中心
實(shí)現(xiàn)一套方案避免出錯(cuò)并減少繁瑣的流程。
首先直接上nginx+confd的dockerfile
FROM nginx:1.21.6 # 拷貝confd二進(jìn)制可執(zhí)行文件 https://github.com/kelseyhightower/confd/releases/tag/v0.16.0 COPY ./confd-0.16.0-linux-amd64 /usr/local/bin/confd # 拷貝wait-for腳本 https://github.com/Eficode/wait-for COPY ./wait-for / # 安裝nc支持wait-for腳本 RUN apt-get update \ && DEBIAN_FRONTEND=noninteractive apt-get install -y \ net-tools \ && apt-get clean \ && rm -rf /var/lib/apt/lists/* RUN apt-get update \ && DEBIAN_FRONTEND=noninteractive apt-get install -y \ netcat \ && apt-get clean \ && rm -rf /var/lib/apt/lists/* # 創(chuàng)建配置文件目錄 RUN mkdir -p /etc/confd/conf.d \ # 給可執(zhí)行權(quán)限 && chmod +x /usr/local/bin/confd \ && chmod 777 /wait-for \ # 使用腳本啟動(dòng)多進(jìn)程 && echo "#!/bin/bash" >> start.sh \ && echo "nohup /usr/local/bin/confd -config-file /etc/confd/conf/confd.toml &" >> start.sh \ && echo "nginx -g 'daemon off;'" >> start.sh \ && chmod 664 ./start.sh CMD ["bash", "start.sh"]
如果不想自己生成可以用:
https://hub.docker.com/repository/docker/lablelan/nginx-confd
這里使用docker-compose來演示如何使用nginx+confd+etcd+etcdkeeper通過圖形化修改nginx配置
version: '2' networks: app-tier: driver: bridge ipam: driver: default config: - subnet: 172.22.0.0/16 services: Etcd: image: 'bitnami/etcd:3.5.2' environment: - ALLOW_NONE_AUTHENTICATION=yes - ETCD_ADVERTISE_CLIENT_URLS=http://etcd:2379 ports: - 2379:2379 - 2380:2380 networks: app-tier: ipv4_address: 172.22.0.2 EtcdKeeper: image: 'deltaprojects/etcdkeeper:latest' - 8000:8080 ipv4_address: 172.22.0.3 Nginx: image: 'lablelan/nginx-confd' command: sh -c '/wait-for Etcd:2379 -- bash start.sh' depends_on: - Etcd volumes: - "./confd.toml:/etc/confd/conf/confd.toml" - "./nginx.tmpl:/etc/confd/templates/nginx.tmpl" - "./myapp-nginx.toml:/etc/confd/conf.d/myapp-nginx.toml" - "./nginx.conf:/etc/nginx/nginx.conf" - "./conf.d:/etc/nginx/conf.d" - 80:80 ipv4_address: 172.22.0.4
啟動(dòng)后當(dāng)通過etcdkeeper創(chuàng)建或更新/myapp/services/web/www/1會(huì)動(dòng)態(tài)生成nginx配置(80端口轉(zhuǎn)發(fā)8080端口)并自動(dòng)生效。這里ip配置的是內(nèi)網(wǎng)ip不使用127.0.0.1,因?yàn)榉?wù)并不跑在nginx容器上(注意www.lablelan.com我本地hosts設(shè)置成了127.0.0.1)
這里端口8080跑的服務(wù)是一個(gè)簡(jiǎn)單的demo服務(wù)(nodejs),需要的可以從gitee獲取
https://gitee.com/lablelan/amis-demo
配置完etcd后我們可以看到訪問http://www.lablelan.com/select已經(jīng)成功返回了
可能這樣并不能體現(xiàn)出這個(gè)方案的實(shí)用性,其實(shí)我們可以通過在業(yè)務(wù)代碼通過將當(dāng)前服務(wù)信息注冊(cè)到etcd實(shí)現(xiàn)服務(wù)發(fā)現(xiàn)功能,這樣就可以動(dòng)態(tài)地生成nginx配置從而避免手動(dòng)修改nginx配置減少出錯(cuò)。
到此這篇關(guān)于docker中通過nginx+confd動(dòng)態(tài)生成配置的流程解析的文章就介紹到這了,更多相關(guān)docker動(dòng)態(tài)生成配置內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
詳解CentOS7用阿里云Docker Yum源在線安裝Docker 17.03.2
這篇文章主要介紹了詳解CentOS7用阿里云Docker Yum源在線安裝Docker 17.03.2,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-09-09windows安裝Docker與docker-compose套裝的詳細(xì)教程
這篇文章主要介紹了windows安裝Docker與docker-compose套裝的詳細(xì)教程,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-12-12docker Compose部署springboot+vue前端端分離
本文主要介紹了docker Compose部署springboot+vue前端端分離,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2022-08-08docker使用dockercompose編排一個(gè)Hadoop集群方式
這篇文章主要介紹了docker使用dockercompose編排一個(gè)Hadoop集群方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-01-01在Linux?Docker中部署RStudio?Server實(shí)現(xiàn)遠(yuǎn)程訪問的操作
下面介紹在Linux?docker中安裝RStudio?Server并結(jié)合cpolar內(nèi)網(wǎng)穿透工具,實(shí)現(xiàn)遠(yuǎn)程訪問,docker方式安裝可以避免很多問題,一鍵安裝,如設(shè)備沒有安裝docker,需提前安裝docker,對(duì)?Docker部署RStudio?Server相關(guān)知識(shí)感興趣的朋友一起看看吧2023-12-12淺談Docker基礎(chǔ)之?dāng)?shù)據(jù)管理
這篇文章主要介紹了淺談Docker基礎(chǔ)之?dāng)?shù)據(jù)管理,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2018-03-03Docker 容器指定自定義網(wǎng)段的固定IP/靜態(tài)IP地址
這篇文章主要介紹了Docker 容器指定自定義網(wǎng)段的固定IP/靜態(tài)IP地址的相關(guān)資料,需要的朋友可以參考下2016-12-12