当前位置: 代码网 > it编程>数据库>Redis > Docker操作之启动多个相同容器实例并nginx负载均衡

Docker操作之启动多个相同容器实例并nginx负载均衡

2024年08月01日 Redis 我要评论
Docker对于开发、运维人员来说都很熟悉,但是对于开发人员来说,多数时候只需一个容器实例运行即可。但是在生产环境或需要需要多并发请求的情况下,则需要部署多个相同的容器,而且还要进行负载均衡。本篇即对如上问题进行了一个实践并记录之,希望可以给初学者起到抛砖引玉的作用。一、一些概念本文针对Docker实现启动多个相同容器实例并通过nginx进行负载均衡的过程进行了说明,并把过程中遇到的问题与解决也进行了说明。希望可以帮到有需要的小伙伴,让我们一同进步。

文章目录

前言

一、一些概念

1.docker

2.nginx

二、操作步骤

1.构建compose.yaml

2.nginx配置

3.docker compose命令

4.问题与解决

总结


前言

docker对于开发、运维人员来说都很熟悉,但是对于开发人员来说,多数时候只需一个容器实例运行即可。但是在生产环境或需要需要多并发请求的情况下,则需要部署多个相同的容器,而且还要进行负载均衡。

本篇即对如上问题进行了一个实践并记录之,希望可以给初学者起到抛砖引玉的作用。


一、一些概念

1.docker

简言之就是类虚机的东西,但是比虚机要轻量,它的底层都是基于linux系统环境,但是在应用层面实现了环境与资源的隔离。一个个容器部署一个个应用,相互之间互不影响,而且可以通过docker、docker compose、k8s等工具进行运维管理。

2.nginx

是一个很出名的web服务器,类tomcat、windows下的iis等。它除了可以做web服务器,还可以做代理、反向代理、负载均衡等。

nginx也可以部署到docker环境下,然后实现对docker其他容器的代理与负载均衡。

二、操作步骤

1.构建compose.yaml

services:
  freegpt35:
    image: missuo/freegpt35:latest
    restart: no
    expose:
      - 3040
    # ports:
    #   - "1301:3040"

  nginx:
    image: nginx:latest
    volumes:
      - ./nginx/nginx.conf:/etc/nginx/nginx.conf:ro
    ports:
      - "1301:80"

相关解释:

freegpt35:即我要部署多个一样的容器

expose: -3040,对外不暴露端口,直接给其他容器(nginx)暴漏3040端口

nginx:

volumes:设置磁盘映射,用于进行nginx的配置(端口、负载均衡)

ports:对外暴漏1301端口映射到内部80端口,到时候我们就可以通过外部1301端口访问freegpt35服务了

2.nginx配置

user  nginx;

events {
    worker_connections   1000;
}

http {
        server {
              listen 80;
              location / {
                proxy_pass http://freegpt35:3040;
              }
        }
}

相关解释:

listen 80:监听80端口

proxy_pass http://freegpt35:3040,即将80端口的请求转发到这个地址,多个freegpt35的这个名称是一样的

3.docker compose命令

docker compose up -d --scale freegpt35=3

相关解释:

--scale 即要设置多个实例

freegpt35=3 即设置对应容器实例个数(这个freegpt35是在compose.yaml文件设置的,需要对应上) 

4.问题与解决

这个时候4个docker容器都起来了,nginx * 1 +  freegpt35 * 3

访问nginx外部地址,但是发现始终请求到某个容器上,没有实现负载均衡!

观察docker的容器日志,发现nginx容器最早启动,然后才是freegpt35,猜测可能nginx先启动但freegpt35还没启动的时候,监测负载均衡服务是有问题的。

尝试停掉nginx,再启动,这个时候负载均衡生效了,基本验证了我的猜想。

然后决定问下ai,基本是这样,给我解决方案可以设置nginx的depends_on属性,即nginx需要依赖freegpt35服务。

services:
  freegpt35:
    image: missuo/freegpt35:latest
    restart: no
    expose:
      - 3040
    # ports:
    #   - "1301:3040"

  nginx:
    image: nginx:latest
    volumes:
      - ./nginx/nginx.conf:/etc/nginx/nginx.conf:ro
    ports:
      - "1301:80"
    depends_on:
      - freegpt35

这里增加了最后面两句

depends_on:
      - freegpt35

再次测试,重启docker,依旧可以实现负载均衡。 


总结

本文针对docker实现启动多个相同容器实例并通过nginx进行负载均衡的过程进行了说明,并把过程中遇到的问题与解决也进行了说明。

希望可以帮到有需要的小伙伴,让我们一同进步。

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com