>운영 및 유지보수 >엔진스 >Docker Compose를 사용하여 nginx 로드 밸런싱을 구현하는 방법

Docker Compose를 사용하여 nginx 로드 밸런싱을 구현하는 방법

PHPz
PHPz앞으로
2023-05-15 21:37:121675검색

Docker 네트워크 관리 및 컨테이너 IP 설정을 기본 지식으로 사용하여 nginx 로드 밸런싱 구현

모든 Docker 네트워크 보기

docker network ls

/*
network id     name         driver       scope
b832b168ca9a    bridge        bridge       local
373be82d3a6a    composetest_default  bridge       local
a360425082c4    host         host        local
154f600f0e90    none         null        local

*/

// composetest_default 是上一篇介绍compose时,docker-compose.yml文件所在的目录名,
// 所以,用docker-compose创建的容器会默认创建一个以目录名为网络名的网络,并且是dridge(桥接)类型

컨테이너 IP 주소 지정

공식 웹사이트 문서 주소:

이전 글 "12. docker 사용하기" 계속해서 작성 "compose 컨테이너 오케스트레이션 도구" 기사의 docker-compose.yml

version: "3"
services:
  web1:
    container_name: web1
    image: "centos:httpd"
    ports:
      - "8080:80"
    privileged: true
    volumes:
      - "/app/www/web1/:/var/www/html/"
    command: ['/usr/sbin/init']
    networks:
      nginx-lsb:
        ipv4_address: 192.169.0.3
  web2:
    container_name: web2
    image: "centos:httpd"
    ports:
      - "8081:80"
    privileged: true
    volumes:
      - "/app/www/web2/:/var/www/html/"
    command: ['/usr/sbin/init']
    networks:
      nginx-lsb:
        ipv4_address: 192.169.0.2
networks:
  nginx-lsb:
    driver: bridge
    ipam:
      config:
        - subnet: 192.169.0.0/16

docker-compose를 사용하여 컨테이너 시작

docker-compose up -d

컨테이너가 시작되었는지 확인하고 nginx-lsb 네트워크가 생성되었는지 확인하세요

// 可以查看当前docker-compose.yml配置的容器组里的容器状态
docker-compose ps

docker network ls

/*
network id     name          driver       scope
b832b168ca9a    bridge         bridge       local
373be82d3a6a    composetest_default   bridge       local
de6f5b8df1c8    composetest_nginx-lsb  bridge       local
a360425082c4    host          host        local
154f600f0e90    none          null        local
*/

// 创建了nginx-lsb网络,命名是容器组项目的 文件名开头_网络名

세부정보 보기 네트워크 nginx-lsb

docker network inspect composetest_nginx-lsb

// 详情里面可以看到使用这个网络的每个容器的ip

如:

/*
...
 "containers": {
      "039aa860ef04f20a7566fdc943fb4398a61d2ad6dd3e373b17c86ac778af89e3": {
        "name": "web2",
        "endpointid": "1bc206661179e65999015f132c2889d3d4365b8d42b8a89cf9c260016fedd5ee",
        "macaddress": "02:42:c0:a9:00:02",
        "ipv4address": "192.169.0.2/16",
        "ipv6address": ""
      },
      "437ad7a07da8e46c0abaf845c4b08425338009fbe972bde69478cf47c75c315b": {
        "name": "web1",
        "endpointid": "5a36e602a5364ee9ad06e9816d09e3966d56ebf06b9394ebc25b8bcee9546607",
        "macaddress": "02:42:c0:a9:00:03",
        "ipv4address": "192.169.0.3/16",
        "ipv6address": ""
      }
    },
...
*/

env_file 환경 파일 사용:

다음과 같이 쉽게 이해할 수 있습니다: docker-compose.yml에 변수를 정의하고 외부 .env 파일에 참조 변수를 정의하세요

공식 문서 주소:

// 还是在composetest目录中定义个 .env文件,用来存放变量
web1_addr=192.169.0.2
web2_addr=192.169.0.3

// 修改docker-compose.yml文件,加入变量定义
version: "3"
services:
  web1:
    container_name: web1
    image: "centos:httpd"
    ports:
      - "8080:80"
    privileged: true
    volumes:
      - "/app/www/web1/:/var/www/html/"
    command: ['/usr/sbin/init']
    networks:
      nginx-lsb:
        ipv4_address: ${web1_addr}
  web2:
    container_name: web2
    image: "centos:httpd"
    ports:
      - "8081:80"
    privileged: true
    volumes:
      - "/app/www/web2/:/var/www/html/"
    command: ['/usr/sbin/init']
    networks:
      nginx-lsb:
        ipv4_address: ${web2_addr}
networks:
  nginx-lsb:
    driver: bridge
    ipam:
      config:
        - subnet: 192.169.0.0/16

Restart composetest 프로젝트를 실행하고 네트워크 세부정보를 확인하고 컨테이너 IP가 성공적으로 설정되었는지 확인하세요

// 重新启动composetest项目
docker-compose up -d

// 查看网络详情
docker network inspect composetest_nginx-lsb

composetest 프로젝트에서 nginx 서버를 로드 밸런싱 서버로 추가

// 在.env文件里添加一个变量 nginx_lsb
web1_addr=192.169.0.2
web2_addr=192.169.0.3
nginx_lsb=192.169.0.100

// 修改docker-compose.yml文件,加入变量定义
version: "3"
services:
  nginx-lsb:
    container_name: nginx-lsb
    image: "centos:nginx"
    ports: 
      - "8000:80"
    privileged: true
    volumes:
      - "/app/nginx/nginx.conf:/etc/nginx/nginx.conf"
    networks:
      nginx-lsb:
        ipv4_address: ${nginx_lsb}
  web1:
    container_name: web1
    image: "centos:httpd"
    ports:
      - "8080:80"
    privileged: true
    volumes:
      - "/app/www/web1/:/var/www/html/"
    command: ['/usr/sbin/init']
    networks:
      nginx-lsb:
        ipv4_address: ${web1_addr}
  web2:
    container_name: web2
    image: "centos:httpd"
    ports:
      - "8081:80"
    privileged: true
    volumes:
      - "/app/www/web2/:/var/www/html/"
    command: ['/usr/sbin/init']
    networks:
      nginx-lsb:
        ipv4_address: ${web2_addr}
networks:
  nginx-lsb:
    driver: bridge
    ipam:
      config:
        - subnet: 192.169.0.0/16

// 重新启动composetest项目
docker-compose up -d

nginx.conf 구성 파일을 수정하고 로드 밸런싱을 구성하세요

upstream mydocker {
  server 192.169.0.2;
  server 192.169.0.3;
}

server {
  listen 80;
  server_name mydocker;
  location / {
    proxy_set_header host $host;
    proxy_set_header x-real-ip $remote_addr;
    proxy_set_header x-forwarded-for $proxy_add_x_forwarded_for;
    proxy_buffering off;
    proxy_pass http://mydocker;
  }
}

다시 시작 nginx-lsb를 실행하고 구성 파일을 로드합니다.

docker-composer restart nginx-lsb

http://server ip address:8000을 방문하여 서버 로드 밸런싱을 테스트하세요!

위 내용은 Docker Compose를 사용하여 nginx 로드 밸런싱을 구현하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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