>운영 및 유지보수 >엔진스 >Docker에서 nginx+confd를 통해 구성을 동적으로 생성하는 방법

Docker에서 nginx+confd를 통해 구성을 동적으로 생성하는 방법

WBOY
WBOY앞으로
2023-05-27 13:04:241880검색

프로젝트가 점점 더 많아지면 nginx 구성을 수정하기 위해 수동으로 서버로 이동하는 것은 매우 번거롭고 문제가 발생할 수 있습니다. nginx+confd+配置中心를 통해 오류를 방지하고 번거로운 프로세스를 줄이는 솔루션을 구현할 수 있습니다.

먼저 nginx+confd

FROM nginx:1.21.6
# 拷贝confd二进制可执行文件 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/*
# 创建配置文件目录
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"]
의 dockerfile을 직접 로드합니다

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

직접 생성하고 싶지 않은 경우 다음을 사용할 수 있습니다.

https://hub.docker.com/repository/docker/lablelan/nginx -confd

여기에서 docker-compose를 사용하십시오. nginx+confd+etcd+etcdkeeper를 사용하여 nginx 구성을 그래픽으로 수정하는 방법을 보여주기 위해

rrreee

시작 후 /myapp/services/web/www/1이 다음을 통해 생성되거나 업데이트될 때 etcdkeeper를 사용하면 nginx 구성이 동적으로 생성되고(포트 80이 포트 8080을 전달) 자동으로 적용됩니다. 여기에 구성된 IP는 인트라넷 IP이며 127.0.0.1을 사용하지 않습니다. 서비스가 nginx 컨테이너에서 실행되지 않기 때문입니다(www.lablelan.com의 로컬 호스트는 127.0.0.1로 설정되어 있습니다)

Docker에서 nginx+confd를 통해 구성을 동적으로 생성하는 방법

여기서는 포트 8080이 실행되고 있습니다. 서비스는 간단한 데모 서비스(nodejs)로, 필요하신 분은 gitee

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

etcd 설정 후 받으시면 됩니다. , 접속 http://www .lablelan.com/select 가 성공적으로 반환된 것을 볼 수 있습니다

Docker에서 nginx+confd를 통해 구성을 동적으로 생성하는 방법

아마도 이는 이 솔루션의 실용성을 반영하지 않을 수도 있습니다. 실제로는 현재 서비스 정보를 비즈니스 코드의 etcd에 추가하여 nginx 구성을 동적으로 생성하여 nginx 구성을 수동으로 수정하지 않고 오류를 줄입니다. 🎜

위 내용은 Docker에서 nginx+confd를 통해 구성을 동적으로 생성하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 yisu.com에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제