当前位置: 首页 > news >正文

Docker Compose多服务编排实战

Docker Compose多服务编排实战:生产级微服务部署完全指南作者:Crown_22 | AI Agent Hermes Agent 桌面程序开发者前言:为什么你的Docker Compose总是出问题?在微服务架构中,Docker Compose是最常用的本地开发和测试工具。但我见过太多项目:docker-compose.yml写了500行,维护困难服务启动顺序混乱,数据库还没就绪应用就崩溃了环境变量管理一团糟,开发/测试/生产配置混乱健康检查缺失,服务挂了都不知道这篇文章不讲基础语法,而是分享生产级Docker Compose的最佳实践。一、服务启动顺序的正确控制❌ 错误:depends_on只保证启动,不保证就绪version:'3.8'services:db:image:postgres:15environment:POSTGRES_PASSWORD:passwordapp:image:myapp:latestdepends_on:-db# ❌ 只保证db容器启动,不保证数据库就绪command:python manage.py runserver问题:应用启动时尝试连接数据库,但PostgreSQL还在初始化,连接失败。✅ 正确:使用healthcheck和conditionversion:'3.8'services:db:image:postgres:15environment:POSTGRES_PASSWORD:passwordhealthcheck:test:["CMD-SHELL","pg_isready -U postgres"]interval:5stimeout:5sretries:5start_period:10sapp:image:myapp:latestdepends_on:db:condition:service_healthy# ✅ 等待db健康检查通过command:python manage.py runserver更复杂的启动顺序version:'3.8'services:redis:image:redis:7-alpinehealthcheck:test:["CMD","redis-cli","ping"]interval:5stimeout:3sretries:5db:image:postgres:15environment:POSTGRES_PASSWORD:passwordhealthcheck:test:["CMD-SHELL","pg_isready -U postgres"]interval:5stimeout:5sretries:5start_period:10smigration:image:myapp:latestcommand:python manage.py migratedepends_on:db:condition:service_healthy# migration运行完就退出restart:"no"app:image:myapp:latestcommand:python manage.py runserverdepends_on:db:condition:service_healthyredis:condition:service_healthymigration:condition:service_completed_successfully# ✅ 等待migration完成自定义等待脚本version:'3.8'services:db:image:postgres:15environment:POSTGRES_PASSWORD:passwordapp:image:myapp:latestdepends_on:-dbentrypoint:["/bin/sh","-c"]command:-|echo "等待数据库就绪..." while ! nc -z db 5432; do sleep 1 done echo "数据库就绪,启动应用" python manage.py runserver二、环境变量管理❌ 错误:硬编码敏感信息version:'3.8'services:db:image:postgres:15environment:POSTGRES_PASSWORD:mysecretpassword123# ❌ 密码直接写在文件里POSTGRES_DB:production_dbapp:image:myapp:latestenvironment:DATABASE_URL:postgresql://postgres:mysecretpassword123@db:5432/production_dbSECRET_KEY:super-secret-key-12345AWS_ACCESS_KEY_ID:AKIAIOSFODNN7EXAMPLEAWS_SECRET_ACCESS_KEY:wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY✅ 正确:使用.env文件# .env文件(不要提交到git)POSTGRES_PASSWORD=your_secure_password_herePOSTGRES_DB=myapp_dbSECRET_KEY=your_secret_key_hereAWS_ACCESS_KEY_ID=your_access_keyAWS_SECRET_ACCESS_KEY=your_secret_key# docker-compose.ymlversion:'3.8'services:db:image:postgres:15environment:POSTGRES_PASSWORD:${POSTGRES_PASSWORD}POSTGRES_DB:${POSTGRES_DB}app:image:myapp:latestenvironment:DATABASE_URL:postgresql://postgres:${POSTGRES_PASSWORD}@db:5432/${POSTGRES_DB}SECRET_KEY:${SECRET_KEY}# .gitignore .env .env.local .env.production使用Docker Secrets(Swarm模式)version:'3.8'services:db:image:postgres:15environment:POSTGRES_PASSWORD_FILE:/run/secrets/db_passwordsecrets:-db_passwordapp:image:myapp:latestsecrets:-db_password-app_secretenvironment:DATABASE_PASSWORD_FILE:/run/secrets/db_passwordsecrets:db_password:file:./secrets/db_password.txtapp_secret:file:./secrets/app_secret.txt多环境配置# 目录结构.├── docker-compose.yml# 基础配置├── docker-compose.override.yml# 开发环境覆盖(自动加载)├── docker-compose.prod.yml# 生产环境配置├── .env.dev# 开发环境变量├── .env.staging# 预发布环境变量└── .env.prod# 生产环境变量# docker-compose.yml(基础配置)version:'3.8'services:db:image:postgres:15volumes:-postgres_data:/var/lib/postgresql/dataapp:build:.ports:-"8000:8000"volumes:postgres_data:# docker-compose.override.yml(开发环境,自动加载)ver
http://www.gsyq.cn/news/1355659.html

相关文章:

  • CPUDoc终极指南:如何智能优化CPU性能,提升游戏帧率和系统响应速度
  • 如何永久保存你的微信聊天记录:WeChatMsg完整解决方案指南
  • LTX-Video 2.3 最新渐变版整合包!文生视频/图生视频双重进化,解压即用(附超详细避坑指南)
  • 别再死记硬背了!用Godot 4.0的CanvasLayer和视口变换,5分钟搞定UI与游戏世界的完美分层
  • 初创团队如何借助Taotoken统一管理多个项目的API密钥与访问权限
  • 2026年5月最新咸阳彬县黄金回收白银回收铂金回收权威排行榜TOP5:纯金+金条+银条+钯金 门店地址联系方式推荐 - 金诚回收
  • Wifite2 无线网络安全审计工具:从零到精通的完整指南
  • 二维紧束缚模型与量子电路映射技术详解
  • 2026年5月最新咸阳淳化黄金回收白银回收铂金回收权威排行榜TOP5:纯金+金条+银条+钯金 门店地址联系方式推荐 - 金诚回收
  • RISC-V MCU移植RTOS实战:以鸿蒙OS LiteOS-M与CH32V307为例
  • Akagi麻雀助手:从新手到高手的实时AI指导伙伴
  • OpCore Simplify:黑苹果OpenCore EFI自动化配置的智能解决方案
  • 2026年5月最新松原乾安黄金回收白银回收铂金回收权威排行榜TOP5:纯金+金条+银条+钯金 门店地址联系方式推荐 - 金诚回收
  • Unity启动Logo跳过指南:三步实现多平台秒开启动
  • 简单三步永久保存你的Spotify音乐收藏:完整Spotify下载器使用指南
  • ESP32录音终极指南:如何用简单代码实现高质量音频采集与存储
  • GTA V脚本开发入门:5步掌握ScriptHookV核心技术
  • Desktop Postflop v0.2.7:高性能德州扑克GTO求解器架构设计与实现原理深度解析
  • Ministral 3B/8B轻量大模型实战指南:边缘部署与工业落地
  • 2026固态电池冬季续航实测:零下20℃仍跑600公里?
  • Windows内核提权漏洞分析与防御实践指南
  • 终极指南:在Windows上完美使用苹果触控板的完整配置方案
  • 2026年5月最新通化集安黄金回收白银回收铂金回收权威排行榜TOP5:纯金+金条+银条+钯金 门店地址联系方式推荐 - 金诚回收
  • Windows微信QQ防撤回终极指南:一键阻止消息被撤回的完整教程
  • 自己造地牢、玩关卡,这款.NET9开源的游戏,能创作,又好玩
  • 从Hugging Face模型到可部署服务:我的fast-whisper中文识别项目踩坑与优化实录
  • 【SRC漏洞挖掘系列】第07期:越权访问(IDOR)—— 隔壁老王的故事
  • Anthropic Zero Layer:大模型推理栈的原子化归一
  • taotoken平台新手指南如何用python调用多模型api
  • UABEA:三步解锁Unity游戏资源编辑的终极解决方案