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:latestrestart: noexpose:- 3040# ports:#   - "1301:3040"nginx:image: nginx:latestvolumes:- ./nginx/nginx.conf:/etc/nginx/nginx.conf:roports:- "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:latestrestart: noexpose:- 3040# ports:#   - "1301:3040"nginx:image: nginx:latestvolumes:- ./nginx/nginx.conf:/etc/nginx/nginx.conf:roports:- "1301:80"depends_on:- freegpt35

这里增加了最后面两句

depends_on:
      - freegpt35

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


总结

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

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/9625.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

VBA_NZ系列工具NZ06:VBA创建PDF文件说明

我的教程一共九套及VBA汉英手册一部,分为初级、中级、高级三大部分。是对VBA的系统讲解,从简单的入门,到数据库,到字典,到高级的网抓及类的应用。大家在学习的过程中可能会存在困惑,这么多知识点该如何组织…

python bisect 二分算法工具以及应用

python bisect 工具以及应用 主要用于在顺序固定的序列中查找以及插入 内置了四种方法 bisect_leftbisect_rightinsort_rightinsort_left bisect_left/right 方法找到应该插入元素的位置,对于和序列中元素不相同的值,两个方法返回的一样,对…

python数据处理(pandas)

# 新的数据格式,csv纯文本,使用某个字符集,比如都是ASCII、Unicode、EBCDIC或GB2312(简体中文环境)等;由记录组成(典型的是每行一条记录)每条记录被分隔符(英语&#xff…

ffmpeg 7.0 + vs2022 +windows编译

后面有总结: 安装msys2 打开 (这一步非常重要不然就得指定vs的环境) x64 Native Tools Command Prompt for VS 2022运行 在x64 Native Tools Command Prompt for VS 2022命令行中切换到msys2安装目录中 打开 msys2_shell.cmd运行 安装 pa…

GNU/Linux - 如何使用lsmod和modinfo命令

How to Use the lsmod and modinfo Commands in Linux Linux 内核是模块化的,这意味着可以根据需要添加和删除模块。这就造就了一个轻量级、安全和轻便的内核。它的灵活性让你可以添加和删除你需要的功能,使操作系统符合你的使用情况和偏好。 The Linux …

企业大文件传输之安全数据传输的重要性

企业数据安全性的维护直接关系到企业的市场竞争力乃至其生存的根基。数据的保护不仅涉及到保护企业的商业秘密,也关乎到客户隐私的保护,更触及到国家安全的敏感层面。因此,保障数据在传输过程中的安全,成为了每个企业和组织必须面…

Linux中的fork与进程地址空间

目录 前言 一、进程地址空间 二、fork的值返回 三、高清图链接 总结 前言 在博主的《进程状态解析》一文中,在讨论进程创建时,提到了一个系统调用接口fork,它在使用过程中表现出对于父子进程不一致的返回结果,而且似乎还具有…

python笔记(17)输入输出

一、标准输入与输出简介 Python通过内置的sys模块管理标准输入(stdin)、标准输出(stdout)和标准错误(stderr)。但对大多数简单应用而言,直接使用内置函数就足够了。 二、输入:inpu…

ETL工具kettle(PDI)入门教程,Transform,Mysql->Mysql,Csv->Excel

什么是kettle,kettle的下载,安装和配置:ETL免费工具kettle(PDI),安装和配置-CSDN博客 mysql安装配置:Linux Centos8 Mysql8.3.0安装_linux安装mysql8.3-CSDN博客 1 mysql -> mysql 1.1 mysql CREATE TABLE user_…

618值得入手的平价好物清单,看完再买不吃亏!

即将到来的618年中购物狂欢节,无疑是一年一度的购物盛宴。为了让大家的购物体验更加愉悦和充实,我特地为大家精选了一系列好物。如果你也打算在618尽情购物,那就赶紧收藏这份清单吧! 一、舒适佩戴不伤耳——南卡骨传导耳机Runner…

C补充1—1章1.0—C程序语言设计(许宝文,李志)

二手书到了,好消息,前主人看的很认真,坏消息,只看到这页了 啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊最后几题好难啊啊啊啊啊,再议 目录 1.1 入门 1.2 变量与算数表达式 练习1-3 //打印温度对照表 练习1-4 //摄氏-华氏温…

微软VC++基础插件集合最新版

随着C语言的不断演进,微软不断更新其Visual C(简称VC)工具集,以支持最新的C标准和开发实践。2024年,微软发布了VC基础插件集合的最新版,为C开发者带来了一系列新功能和改进。以下是关于这个最新版插件集合的…

医疗行业如何提升Windows操作系统登录的安全性

医疗行业使用账号和密码登录Windows系统时,可能会遇到一些痛点,这些痛点可能会影响工作效率、数据安全和用户体验。以下是一些主要的痛点: 1. 密码管理复杂性:医疗行业通常涉及大量的敏感数据和隐私信息,因此密码策略…

为什么 Cloudflare 是 2024 年 Vercel 的最佳替代品?生态系统和价格比较

本文探讨了 Vercel 的功能,并与 Cloudflare 生态系统中的类似产品进行了比较。从托管到存储,我们将看到为什么 Cloudflare 可以在 2024 年成为 Vercel 的最佳替代品。 文章目录 介绍什么是 Cloudflare?Cloudflare vs Vercel:托管和…

实战 | 18行代码轻松实现人脸实时检测【附完整代码与源码详解】Opencv、人脸检测

《博主简介》 小伙伴们好,我是阿旭。专注于人工智能、AIGC、python、计算机视觉相关分享研究。 ✌更多学习资源,可关注公-仲-hao:【阿旭算法与机器学习】,共同学习交流~ 👍感谢小伙伴们点赞、关注! 《------往期经典推…

BS架构 数据权限--字段级权限 设计与实现

一、需求场景 1. 销售发货场景 销售出库单上 有 商品名称、发货数量、单价、总金额 等信息。 销售人员 关注 上述所有信息,但 仓管人员 不需要知道 单价、总金额 信息。 2. 配方、工艺保密 场景 配方研发人员 掌握核心配方, 但 交给车间打样、生产时…

深入探索Dockerfile:构建容器化应用的秘密武器

想象一下,您正在开发一款创新的Web应用,您希望能够简化部署流程、确保环境一致性,并且提高开发团队的效率。在这个过程中,Dockerfile 可能是您最强大的工具之一。Dockerfile 是一个简单而又强大的文本文件,它包含了构建…

锚索测力计在岩土工程中的应用

随着现代工程建设的快速发展,岩土工程安全问题日益受到人们的关注。岩土工程中的锚索结构,作为保证工程稳定和安全的关键部分,其性能监测和评估显得尤为重要。近年来,锚索测力计作为一种先进的监测工具,在岩土工程安全…

微信小程序跳转微信管理平台配置的客服及意见页面

<button open-type"contact" bindcontact"handleContact" session-from"sessionFrom">帮助与客服</button> 不需要路径 在当前小程序中会自动进入 open-type"contact" 其他参数不用修改 只修改这个参数对应表单组件 /…

【千帆平台】使用AppBuilder零代码创建应用,然后通过OpenAPI方式调用应用

欢迎来到《小5讲堂》 这是《千帆平台》系列文章&#xff0c;每篇文章将以博主理解的角度展开讲解。 温馨提示&#xff1a;博主能力有限&#xff0c;理解水平有限&#xff0c;若有不对之处望指正&#xff01; 目录 前言创建API密钥调用文档调用说明API服务域名通信协议字符编码公…