h5企业网站通用源码海南省建设厅网站
h5企业网站通用源码,海南省建设厅网站,宁波网站建设那家好,移动端开发工具文章目录 第 19 篇、凌晨 2 点被喊起来扩容#xff1f;Docker Compose 水平扩展负载均衡#xff0c;30分钟搞定#xff0c;不用K8s先搞懂核心原理1. 什么是水平扩展#xff1f;2. Docker Compose 负载均衡的底层逻辑#xff1a;内置 DNS 服务发现 新手必踩的 8 个致命坑坑…文章目录第 19 篇、凌晨 2 点被喊起来扩容Docker Compose 水平扩展负载均衡30分钟搞定不用K8s先搞懂核心原理1. 什么是水平扩展2. Docker Compose 负载均衡的底层逻辑内置 DNS 服务发现新手必踩的 8 个致命坑坑 1命令版本混用坑 2scale 命令缺参数坑 3清理命令太暴力坑 4Nginx 缺 DNS 配置坑 5服务网络隔离错坑 6启动依赖没配条件坑 7没加健康检查坑 8build 和 image 配置混淆实战 1极简版内置 DNS 轮询无 Nginx步骤 1环境准备步骤 2项目结构与配置文件步骤 3启动服务验证基础状态步骤 4水平扩展服务步骤 5验证负载均衡效果步骤 6缩容服务实战 2Nginx 版添加 Nginx 反向代理步骤 1更新项目结构步骤 2更新 docker-compose.yml添加 Nginx 步骤 3添加 Nginx 配置步骤 4启动服务验证效果写在最后新手专属福利资料领取方式其他疑问第 19 篇、凌晨 2 点被喊起来扩容Docker Compose 水平扩展负载均衡30分钟搞定不用K8s凌晨 2 点部门群里“ 全员测试压测把接口打崩了单容器 QPS 到顶用户访问直接 50210 分钟内必须扩容恢复。”你盯着屏幕脑子一片空白。现在真到要扩容的时候可完全不知道从哪下手别慌今天这篇文章就带你用 Docker Compose 原生能力30 分钟搞定水平扩展 负载均衡。不用 K8s 集群不用付费 SLB。零基础复制粘贴就能跑通连运维小白都能直接落地。【本文适配 Docker Compose V2 官方最新版本】本文是《Docker 实战》系列第 19篇全系列文章覆盖 Docker 基础、容器、镜像、仓库、网络核心实战再到数据持久化、Dockerfile、Docker Compose 全场景落地全程保姆级实战教学。文末还给大家准备了专属新手福利我亲手整理的**《Docker Compose 生产级最佳实践手册》 《10 套开箱即用 Compose 配置文件》。**先搞懂核心原理很多新手搞不懂为什么 Docker Compose 不用额外配置就能实现负载均衡核心就两个知识点看完你就通透了。1. 什么是水平扩展垂直扩展给单容器加 CPU / 内存相当于给电脑换更大的内存条上限低、成本高很容易触顶水平扩展增加服务的容器实例数相当于多开几台电脑一起干活弹性强、成本可控也是本文要讲的核心能力2. Docker Compose 负载均衡的底层逻辑内置 DNS 服务发现Docker Compose 会给同一个服务的所有容器分配同一个服务名比如 flask内置的 DNS 服务器会把这个服务名轮询解析到所有后端容器的 IP 上。简单说你只要访问服务名Docker 会自动把请求分给不同的容器天生就带负载均衡能力不用额外装任何组件。新手必踩的 8 个致命坑坑 1命令版本混用❌错误写法混用旧版docker-compose带横杠和新版docker compose空格✅正确方案统一用官方标准docker compose空格2023 年起 Docker 已彻底废弃 V1 旧版⚠️风险说明旧命令复制后直接报错新手找不到问题根源白白浪费时间坑 2scale 命令缺参数❌错误写法docker compose up scale flask3少了--✅正确方案docker compose up --scale 服务名实例数 -d比如--scale flask3⚠️风险说明语法错误导致命令执行失败以为是环境问题实则只是少个符号坑 3清理命令太暴力❌错误写法docker container rm -f $(docker container ps -aq)删除所有容器✅正确方案仅清理当前项目docker compose down -v --rmi local⚠️风险说明会删除主机上所有容器不管是不是当前项目的新手执行直接 “翻车”误删其他服务坑 4Nginx 缺 DNS 配置❌错误写法Nginx 直接写proxy_pass http://flask:5000;不配置 DNS✅正确方案加 Docker 内置 DNS 配置resolver 127.0.0.11 valid5s;5 秒刷新解析⚠️风险说明Nginx 默认永久缓存 DNS扩容新容器后不更新 IP负载均衡完全不生效很多朋友反馈加了 resolver负载均衡还是失效。核心是没做动态上游 故障自动剔除扩容新容器不识别、宕机还在转发请求最终还是用户 502、线上背锅。 【付费专属内容】给你 100 项目验证过的 Nginx 动态上游完整配置复制即用彻底解决这个生产死穴。 这个方案的完整踩坑笔记和更新动态我会同步更新有需要可以文末找我。坑 5服务网络隔离错❌错误写法Nginx 和业务服务分属不同网络业务服务没加双网络✅正确方案被 Nginx 访问的服务需同时加入 “前端网络” 和 “后端网络”比如 flask 加frontend-networkbackend-network⚠️风险说明Nginx 访问不到业务容器用户访问直接返回 502排查半天找不到网络问题坑 6启动依赖没配条件❌错误写法只写depends_on: - flask不配置启动条件✅正确方案补充健康检查依赖depends_on: {flask: {condition: service_healthy}}⚠️风险说明只会等容器启动不会等服务就绪比如 flask 还没跑起来Nginx 就启动了直接返回 502坑 7没加健康检查❌错误写法服务配置里完全没有healthcheck字段✅正确方案给所有服务加健康检查比如 flaskhealthcheck: test: [CMD, curl, -f, http://localhost:5000] interval: 5s timeout: 2s retries: 3⚠️风险说明Docker 会把请求转发到已挂掉的容器用户频繁看到 502还以为是负载均衡配置错了**提醒大家**基础健康检查只能识别容器状态没法自动重启、异常告警。凌晨容器崩了没人管等用户投诉到老板那你才被叫醒救火太被动。 【付费专属内容】给你生产级高可用自愈方案自动重启 多平台告警配置不用 24 小时人工盯守。 这个方案的完整踩坑笔记和更新动态我会同步更新有需要可以文末找我。坑 8build 和 image 配置混淆❌错误写法以为build和image二选一写了image就删build✅正确方案同时写是 “构建后打标签”必须保留build比如构建 flask 镜像并标为flask-demo:latest⚠️风险说明没build字段会跳过镜像构建直接拉取同名公共镜像服务启动后完全不是自己要的功能实战 1极简版内置 DNS 轮询无 Nginx关于 Docker 基础、容器、镜像、仓库、网络核心实战再到数据持久化、Dockerfile、Docker Compose 全场景落地的更多高频坑我都整理在了《Docker 实战》系列文章里。关注我「王二哥的技术笔记」:查看往期全系列文章。及时接收最新更新文章。私信我发送关键词【Compose】即可直接领取全套资料。适合内网测试、快速验证扩容效果零额外依赖复制就能跑。步骤 1环境准备确保安装官方最新版本Docker Engine ≥ 20.10Docker Compose V2验证命令docker --version docker compose version步骤 2项目结构与配置文件创建项目目录结构如下compose-scale-demo/ ├── docker-compose.yml └── flask/ ├── Dockerfile └── app.py先写flask/app.py用来返回容器 ID验证负载均衡效果fromflaskimportFlaskfromredisimportRedisimportos appFlask(__name__)redisRedis(hostos.environ.get(REDIS_HOST,redis-server),port6379)app.route(/)defhello():countredis.incr(hits)hostnameos.uname()[1]# 获取容器ID容器的hostname就是容器IDreturnfHello World! 我被访问了{count}次当前处理容器ID{hostname}\nif__name____main__:app.run(host0.0.0.0,port5000,debugTrue)再写flask/Dockerfile业务镜像构建文件FROM python:3.9.5-slim RUN pip install flask redis \ groupadd -r flask useradd -r -g flask flask \ mkdir /src \ chown -R flask:flask /src USER flask COPY app.py /src/app.py WORKDIR /src ENV FLASKapp.py REDIS_HOSTredis EXPOSE 5000 CMD [flask, run, -h, 0.0.0.0]核心docker-compose.ymlservices:flask:build:context:./flaskdockerfile:Dockerfileimage:flask-demo:latestenvironment:-REDIS_HOSTredis-serverredis-server:image:redis:latestclient:image:xiaopeng163/net-box:latestcommand:sh-c while true; do sleep 3600; done;步骤 3启动服务验证基础状态# 进入项目目录 cd compose-scale-demo # 构建镜像后台启动服务 docker compose up -d --build # 查看服务状态确保所有服务都是healthy状态 docker compose ps步骤 4水平扩展服务# 把flask服务从1个实例一键扩展到3个实例 docker compose up --scale flask3 -d # 再次查看状态会看到3个flask容器全部为healthy docker compose ps步骤 5验证负载均衡效果进入 client 容器多次访问 flask 服务观察返回的容器 ID# 进入client容器终端 docker compose exec client bash # 多次访问验证负载均衡 curl http://flask:5000✅ 预期结果每次返回的容器 ID 都不一样说明 Docker 内置 DNS 已经实现了轮询负载均衡水平扩展成功步骤 6缩容服务# 把flask服务一键缩容到1个实例 docker compose up --scale flask1 -d实战 2Nginx 版添加 Nginx 反向代理适合对外暴露服务、需要高级负载策略的场景适用于生产环境。步骤 1更新项目结构compose-scale-demo/ ├── docker-compose.yml ├── flask/ │ ├── Dockerfile │ └── app.py └── nginx/ └── nginx.conf步骤 2更新 docker-compose.yml添加 Nginx services: # 省略其他。。。 # 添加Nginx反向代理对外入口七层负载均衡 nginx: image: nginx:stable-alpine ports: - 8000:80 # 对外暴露8000端口可自行修改为80 volumes: # 只读挂载配置文件提升安全性 - ./nginx/nginx.conf:/etc/nginx/conf.d/default.conf:ro networks: - frontend-network # 启动依赖等flask服务完全就绪再启动nginx避免启动时502 depends_on: flask: condition: service_healthy healthcheck: test: [CMD, wget, -q, --spider, http://localhost:80/health] interval: 10s timeout: 5s retries: 3步骤 3添加 Nginx 配置nginx/nginx.confserver { listen 80 default_server; location / { proxy_pass http://flask:5000; } }步骤 4启动服务验证效果# 启动服务 docker compose up -d --build # 一键扩展flask到3个实例 docker compose up --scale flask3 -d # 查看服务状态确保所有服务healthy docker compose ps✅ 验证方式浏览器访问http://你的服务器IP:8000多次刷新页面显示的容器 ID 会不断变化本地多次执行 curl 命令验证curl http://localhost:8000查看 Nginx 日志确认请求被分发到不同容器docker compose logs -f nginx现在你能手动扩容了但生产更新镜像 / 改代码一重启就 502用户流失、老板问责。不用硬上复杂的 K8sDocker Compose 原生就能搞定。 【付费专属内容】带你 1 分钟实现零停机滚动更新含完整配置 失败回滚兜底方案中小项目直接落地。 这个方案的完整踩坑笔记和更新动态我会同步更新有需要可以文末找我。写在最后新手专属福利为了帮大家更快上手 Docker我给大家整理了专属资料都是我自己生产环境在用、新手能直接抄的实战内容《Docker Compose 生产级最佳实践》包含了生产部署核心原则、官方标准做法、避坑红线零基础也能直接落地Docker官方维护**《10套开箱即用Compose配置文件》**覆盖 Python / NGINX / MySQL等主流技术栈可直接复制到生产环境使用**《Docker 实战》**全系列避坑指南合集覆盖网络、数据卷、镜像、编排全模块的 30 个新手高频坑帮你少走半年弯路资料领取方式私信我发送关键词【Compose】自动给你资料领取详情。我会持续更新 Docker、云原生、Python 后端的实战干货把我踩过的坑、总结的实战经验全部分享给你帮你从入门到精通少走弯路。我们下期再见。其他疑问第 18 篇、凌晨 3 点还在排查 Docker 网络故障Compose 容器通信玄学90% 的坑都在这了第 17 篇、凌晨 2 点还在更新 Docker 服务Compose 越更越崩90% 的坑都在这了第 16 篇、90% Docker 新手都栽在这Compose 镜像构建的 5 个致命坑新手直接抄第 15 篇、90% 的 Docker 新手都踩过的 8 个 Compose 坑一文讲透核心逻辑新手直接抄Docker多容器环境别瞎部署了搞懂Compose少走 90% 的弯路相关内容我都给大家做好了感兴趣的朋友来「我的主页」找一找直接就可以看到。欢迎关注 「王二哥的技术笔记」每天分享「Docker」、「Python」、「FastAPI」、「Flask」有趣干货千万不要错过