千家信息网

docker中如何通过nginx+confd动态生成配置

发表于:2024-10-19 作者:千家信息网编辑
千家信息网最后更新 2024年10月19日,小编给大家分享一下docker中如何通过nginx+confd动态生成配置,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!当我们项目越来越多时手动去服务器修改nginx配置是一件很麻烦
千家信息网最后更新 2024年10月19日docker中如何通过nginx+confd动态生成配置

小编给大家分享一下docker中如何通过nginx+confd动态生成配置,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!

当我们项目越来越多时手动去服务器修改nginx配置是一件很麻烦而且可能出错的事情。我们可以通过nginx+confd+配置中心实现一套方案避免出错并减少繁琐的流程。

首先直接上nginx+confd的dockerfile

FROM nginx:1.21.6# 拷贝confd二进制可执行文件 https://github.com/kelseyhightower/confd/releases/tag/v0.16.0COPY ./confd-0.16.0-linux-amd64 /usr/local/bin/confd# 拷贝wait-for脚本 https://github.com/Eficode/wait-forCOPY ./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/*# 创建配置文件目录RUN mkdir -p /etc/confd/conf.d \# 给可执行权限&& chmod +x /usr/local/bin/confd \&& chmod 777 /wait-for \# 使用脚本启动多进程&& 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/16services:  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

启动后当通过etcdkeeper创建或更新/myapp/services/web/www/1会动态生成nginx配置(80端口转发8080端口)并自动生效。这里ip配置的是内网ip不使用127.0.0.1,因为服务并不跑在nginx容器上(注意www.lablelan.com我本地hosts设置成了127.0.0.1)

这里端口8080跑的服务是一个简单的demo服务(nodejs),需要的可以从gitee获取

https://gitee.com/lablelan/amis-demo

配置完etcd后我们可以看到访问http://www.lablelan.com/select已经成功返回了

可能这样并不能体现出这个方案的实用性,其实我们可以通过在业务代码通过将当前服务信息注册到etcd实现服务发现功能,这样就可以动态地生成nginx配置从而避免手动修改nginx配置减少出错。

看完了这篇文章,相信你对"docker中如何通过nginx+confd动态生成配置"有了一定的了解,如果想了解更多相关知识,欢迎关注行业资讯频道,感谢各位的阅读!

0