Docker Compose 多容器编排:微服务(API+MySQL+Redis)本地联调环境搭建
·
Docker Compose 多容器编排:微服务本地联调环境搭建
核心组件说明
- API服务:业务逻辑处理(假设使用 Python Flask)
- MySQL:关系型数据库存储
- Redis:缓存与会话管理
文件结构
project/
├── api/
│ ├── app.py
│ ├── requirements.txt
│ └── Dockerfile
└── docker-compose.yml
配置文件实现
1. Docker Compose 编排文件 (docker-compose.yml)
version: '3.8'
services:
api:
build: ./api
container_name: api
ports:
- "5000:5000"
environment:
- MYSQL_HOST=mysql
- MYSQL_USER=root
- MYSQL_PASSWORD=rootpass
- REDIS_HOST=redis
depends_on:
- mysql
- redis
networks:
- app-network
mysql:
image: mysql:8.0
container_name: mysql
environment:
MYSQL_ROOT_PASSWORD: rootpass
MYSQL_DATABASE: appdb
volumes:
- mysql-data:/var/lib/mysql
ports:
- "3306:3306"
networks:
- app-network
redis:
image: redis:6-alpine
container_name: redis
ports:
- "6379:6379"
networks:
- app-network
volumes:
mysql-data:
networks:
app-network:
driver: bridge
2. API 服务 Dockerfile (api/Dockerfile)
FROM python:3.9-slim
WORKDIR /app
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt
COPY . .
EXPOSE 5000
CMD ["python", "app.py"]
3. Python 依赖文件 (api/requirements.txt)
Flask==2.0.2
redis==4.1.0
mysql-connector-python==8.0.26
4. Flask 应用示例 (api/app.py)
from flask import Flask
import mysql.connector
import redis
app = Flask(__name__)
# 从环境变量获取配置
mysql_host = os.environ.get('MYSQL_HOST')
mysql_user = os.environ.get('MYSQL_USER')
mysql_password = os.environ.get('MYSQL_PASSWORD')
redis_host = os.environ.get('REDIS_HOST')
@app.route('/')
def health_check():
# 测试MySQL连接
try:
mysql_conn = mysql.connector.connect(
host=mysql_host,
user=mysql_user,
password=mysql_password,
database="appdb"
)
mysql_conn.close()
mysql_status = "MySQL: ✔"
except Exception as e:
mysql_status = f"MySQL: ✘ ({str(e)})"
# 测试Redis连接
try:
r = redis.Redis(host=redis_host, port=6379)
r.ping()
redis_status = "Redis: ✔"
except Exception as e:
redis_status = f"Redis: ✘ ({str(e)})"
return f"<h3>微服务状态</h3><p>{mysql_status}<br>{redis_status}</p>"
if __name__ == '__main__':
app.run(host='0.0.0.0', port=5000)
操作流程
-
启动服务
docker-compose up --build -
验证服务
- 访问
http://localhost:5000查看服务状态 - MySQL 连接:
mysql -h 127.0.0.1 -u root -p - Redis 连接:
redis-cli -h 127.0.0.1
- 访问
-
停止服务
docker-compose down
关键特性说明
- 服务发现:容器间通过服务名互访(如
api容器使用mysql主机名访问数据库) - 数据持久化:MySQL 数据通过命名卷
mysql-data持久存储 - 依赖管理:
depends_on确保启动顺序- 环境变量隔离敏感配置
- 网络隔离:自定义桥接网络确保容器间安全通信
通过此配置,可实现开发环境的快速重建和一致性保障,支持 API 服务的热重载(需在 Dockerfile 中添加代码监控逻辑)。
更多推荐
所有评论(0)