1.前言
docker compose基于python镜像启动容器, 支持多实例
2.环境信息
系统: Alibaba Cloud Linux release 3 (OpenAnolis Edition)
架构: x86_64
docker版本: Docker version 26.1.3, build b72abbb
3.部署文件
3.1.Dockerfile
FROM python:3.10-slim
# 设置工作目录
WORKDIR /app
# 设置环境变量
ENV PYTHONPATH=/app
ENV PYTHONUNBUFFERED=1
# 复制应用代码(从项目根目录复制)
COPY . .
# 防止.env.prod不存在报错
RUN touch /app/.env.prod
# 删除原有.env文件(如果存在),并将.env.prod重命名为.env
RUN rm -f /app/.env && \
if [ -f /app/.env.prod ]; then mv /app/.env.prod /app/.env; fi
# 更新pip
RUN python -m pip install --upgrade pip -i https://mirrors.aliyun.com/pypi/simple/ requests
# 根据requirements.txt文件安装依赖(可选)
RUN pip install --no-cache-dir -r requirements.txt -i https://mirrors.aliyun.com/pypi/simple/ requests
# 安装其他依赖(可选)
#RUN pip install --upgrade Flask -i https://mirrors.aliyun.com/pypi/simple/ requests
# 设置时区
ENV TZ=Asia/Shanghai
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone
# 创建日志目录
RUN mkdir -p /app/logs
# 设置非root用户
RUN useradd --create-home --shell /bin/bash app && \
chown -R app:app /app
USER app
# 暴露端口(如果需要的话)
#EXPOSE 8888
# 启动命令
CMD ["python", "main.py"]
3.2.docker-compose.yml
{SERVER_CODE} 需要替换为服务编码
services:
{SERVER_CODE}:
build:
context: .
dockerfile: Dockerfile
restart: unless-stopped
volumes:
- ./logs:/app/logs # 挂载日志卷
networks:
- {SERVER_CODE}_network
healthcheck:
test: ["CMD", "python", "-c", "import sys; sys.exit(0)"]
interval: 30s
timeout: 10s
retries: 3
start_period: 40s
networks:
{SERVER_CODE}_network:
driver: bridge
3.3.deploy.sh
#!/bin/bash
# 使用方法: ./deploy.sh [start|stop|restart|status|logs|scale]
set -e
# 颜色定义
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
NC='\033[0m' # No Color
# 服务名称
SERVER_NAME="xxx"
# 服务编码
SERVER_CODE="test_xxx"
# 日志函数
log_info() {
echo -e "${BLUE}[INFO]${NC} $1"
}
log_success() {
echo -e "${GREEN}[SUCCESS]${NC} $1"
}
log_warning() {
echo -e "${YELLOW}[WARNING]${NC} $1"
}
log_error() {
echo -e "${RED}[ERROR]${NC} $1"
}
# 检查Docker和Docker Compose是否安装
check_dependencies() {
log_info "检查依赖..."
if ! command -v docker &> /dev/null; then
log_error "Docker未安装,请先安装Docker"
exit 1
fi
if ! command -v docker compose &> /dev/null; then
log_error "Docker Compose未安装,请先安装Docker Compose"
exit 1
fi
log_success "依赖检查通过"
}
# 启动服务
start_services() {
# 在 docker-compose.yml 所在目录执行
mkdir -p ./logs
# 775不行
chmod 777 ./logs
log_info "启动${SERVER_NAME}..."
check_dependencies
# 构建镜像
log_info "构建Docker镜像..."
docker compose build --no-cache
# 启动服务
log_info "启动服务..."
docker compose up -d
# 等待服务启动
log_info "等待服务启动..."
sleep 3
log_success "服务启动完成!"
}
# 停止服务
stop_services() {
log_info "停止${SERVER_NAME}..."
docker compose down
log_success "服务已停止"
}
# 重启服务
restart_services() {
log_info "重启${SERVER_NAME}..."
stop_services
sleep 5
start_services
}
# 显示服务状态
show_status() {
log_info "${SERVER_NAME}状态:"
docker compose ps
echo ""
log_info "${SERVER_NAME}日志 (最近50行):"
docker compose logs --tail=50
}
# 显示实时日志
show_logs() {
log_info "显示${SERVER_NAME}最新200行日志:"
docker compose logs --tail=200 -f
}
# 扩缩容
scale_services() {
if [ -z "$2" ]; then
log_error "请指定实例数量,例如: ./deploy.sh scale 3"
exit 1
fi
local instances=$2
log_info "扩缩容到 $instances 个实例..."
# 更新环境变量
if grep -q "WORKER_INSTANCES=" .env; then
sed -i "s/WORKER_INSTANCES=.*/WORKER_INSTANCES=$instances/" .env
else
echo "WORKER_INSTANCES=$instances" >> .env
fi
# 重新启动服务
docker compose down
docker compose up -d --scale ${SERVER_CODE}=$instances
log_success "扩缩容完成,当前实例数: $instances"
}
# 清理资源
cleanup() {
log_info "清理Docker资源..."
docker compose down -v
docker system prune -f
log_success "清理完成"
}
# 显示帮助信息
show_help() {
echo "${SERVER_NAME}部署脚本"
echo ""
echo "使用方法:"
echo " $0 start - 启动服务"
echo " $0 stop - 停止服务"
echo " $0 restart - 重启服务"
echo " $0 status - 查看服务状态"
echo " $0 logs - 查看实时日志"
echo " $0 scale N - 扩缩容到N个实例"
echo " $0 cleanup - 清理Docker资源"
echo " $0 help - 显示帮助信息"
echo ""
echo "示例:"
echo " $0 start # 启动服务"
echo " $0 scale 5 # 扩容到5个实例"
echo " $0 logs # 查看日志"
}
# 主函数
main() {
case "${1:-help}" in
start)
start_services
;;
stop)
stop_services
;;
restart)
restart_services
;;
status)
show_status
;;
logs)
show_logs
;;
scale)
scale_services "$@"
;;
cleanup)
cleanup
;;
help|--help|-h)
show_help
;;
*)
log_error "未知命令: $1"
show_help
exit 1
;;
esac
}
# 执行主函数
main "$@"
3.4.deploy_readme.md
# AI图像超高清中转服务部署文档
## 项目概述
这是一个基于Docker的AI图像超高清处理服务,提供图像上传、处理和结果查询的REST API接口。服务使用Flask框架构建,支持文件上传、任务调度和结果查询功能。
## 服务信息
- **服务名称**: xxx
- **服务代码**: test_xxx
- **端口**: 5000
- **基础镜像**: python:3.10-slim
## 系统要求
### 必需依赖
- Docker (最新版本)
- Docker Compose (最新版本)
- 至少 2GB 可用内存
- 至少 1GB 可用磁盘空间
### 检查依赖
```bash
# 检查Docker是否安装
docker --version
# 检查Docker Compose是否安装
docker compose version
```
## 快速开始
### 1. 克隆项目
```bash
git clone <repository-url>
cd test_xxx
```
### 2. 启动服务
```bash
# 给脚本执行权限
chmod +x deploy.sh
# 启动服务
./deploy.sh start
```
### 3. 验证服务
```bash
# 检查服务状态
./deploy.sh status
# 查看服务日志
./deploy.sh logs
```
## 部署脚本使用说明
### 基本命令
| 命令 | 描述 | 示例 |
|------|------|------|
| `start` | 启动服务 | `./deploy.sh start` |
| `stop` | 停止服务 | `./deploy.sh stop` |
| `restart` | 重启服务 | `./deploy.sh restart` |
| `status` | 查看服务状态 | `./deploy.sh status` |
| `logs` | 查看实时日志 | `./deploy.sh logs` |
| `scale N` | 扩缩容到N个实例 | `./deploy.sh scale 3` |
| `cleanup` | 清理Docker资源 | `./deploy.sh cleanup` |
| `help` | 显示帮助信息 | `./deploy.sh help` |
### 详细使用说明
#### 启动服务
```bash
./deploy.sh start
```
- 检查Docker和Docker Compose依赖
- 创建日志目录并设置权限
- 构建Docker镜像(无缓存)
- 启动服务容器
- 等待服务启动完成
#### 停止服务
```bash
./deploy.sh stop
```
- 停止所有相关容器
- 清理容器资源
#### 重启服务
```bash
./deploy.sh restart
```
- 先停止服务
- 等待5秒
- 重新启动服务
#### 查看服务状态
```bash
./deploy.sh status
```
- 显示容器运行状态
- 显示最近50行日志
#### 查看实时日志
```bash
./deploy.sh logs
```
- 实时显示服务日志
- 按Ctrl+C退出
#### 服务扩缩容
```bash
./deploy.sh scale 5
```
- 扩容到5个实例
- 自动更新环境变量
- 重新启动服务
#### 清理资源
```bash
./deploy.sh cleanup
```
- 停止并删除容器
- 清理Docker系统资源
- 删除未使用的镜像和卷
## 服务配置
### Docker配置
- **工作目录**: `/app`
- **时区**: Asia/Shanghai
- **用户**: app (非root用户)
- **健康检查**: 每30秒检查一次
- **重启策略**: unless-stopped
### 环境变量
```bash
PYTHONPATH=/app
PYTHONUNBUFFERED=1
TZ=Asia/Shanghai
```
### 网络配置
- **网络名称**: test_xxx_network
- **网络类型**: bridge
- **端口映射**: 5000:5000
## 日志管理
### 日志位置
- **容器内**: `/app/logs`
- **宿主机**: `./logs`
### 日志权限
```bash
chmod 777 ./logs
```
### 查看日志
```bash
# 查看服务日志
./deploy.sh logs
# 查看Docker日志
docker compose logs
# 查看特定容器日志
docker logs <container_name>
```
## 故障排除
### 常见问题
#### 1. Docker未安装
```bash
# Ubuntu/Debian
sudo apt-get update
sudo apt-get install docker.io docker-compose
# CentOS/RHEL
sudo yum install docker docker-compose
```
#### 2. 权限问题
```bash
# 添加用户到docker组
sudo usermod -aG docker $USER
# 重新登录或执行
newgrp docker
```
#### 3. 端口冲突
```bash
# 检查端口占用
netstat -tulpn | grep 5000
# 或修改docker-compose.yml中的端口映射
```
#### 4. 内存不足
```bash
# 检查系统资源
free -h
df -h
# 清理Docker资源
./deploy.sh cleanup
```
### 调试命令
#### 查看容器状态
```bash
docker compose ps
```
#### 进入容器
```bash
docker compose exec test_xxx bash
```
#### 查看容器资源使用
```bash
docker stats
```
#### 查看详细日志
```bash
docker compose logs --tail=100 -f
```
## 生产环境部署
### 安全配置
1. 修改OSS配置中的密钥
2. 设置防火墙规则
3. 使用HTTPS证书
4. 配置反向代理
### 性能优化
1. 调整容器资源限制
2. 配置负载均衡
3. 使用CDN加速
4. 优化数据库连接
### 监控告警
1. 配置健康检查
2. 设置日志监控
3. 配置资源告警
4. 设置自动重启
## 维护操作
### 定期维护
```bash
# 清理未使用的资源
./deploy.sh cleanup
# 更新镜像
docker compose pull
./deploy.sh restart
# 备份数据
docker compose exec test_xxx tar -czf /tmp/backup.tar.gz /app/uploads
```
### 版本升级
```bash
# 停止服务
./deploy.sh stop
# 更新代码
git pull
# 重新构建并启动
./deploy.sh start
```
## 联系支持
如遇到问题,请检查:
1. 系统日志: `./deploy.sh logs`
2. 服务状态: `./deploy.sh status`
3. 系统资源使用情况
4. 网络连接状态
---
**注意**: 请确保在生产环境中修改所有默认配置,包括OSS密钥、数据库连接等敏感信息。
4.启动
sh deploy.sh start
5.停止
sh deploy.sh stop
6.重启
sh deploy.sh restart
Docker Compose部署Python服务

811

被折叠的 条评论
为什么被折叠?



