RAG/docker-export.sh

115 lines
3.2 KiB
Bash

#!/bin/bash
# Docker 镜像导出脚本
# 用于将 Docker 镜像打包成 tar 文件,方便迁移到目标机器
# 使用方法: ./docker-export.sh
set -e
echo "=== Docker 镜像导出脚本 ==="
echo ""
# 检查镜像是否存在
echo "1. 检查镜像是否存在..."
if ! docker images | grep -q "rag-rag-api"; then
echo "Error: rag-rag-api 镜像不存在,请先运行: docker-compose build"
exit 1
fi
if ! docker images | grep -q "chromadb/chroma"; then
echo "Error: chromadb/chroma 镜像不存在"
exit 1
fi
if ! docker images | grep -q "rag-soffice-service"; then
echo "Error: rag-soffice-service 镜像不存在,请先运行: docker-compose build"
exit 1
fi
# 创建导出目录
EXPORT_DIR="docker-images-export"
mkdir -p "$EXPORT_DIR"
echo ""
echo "2. 导出 rag-api 镜像..."
docker save rag-rag-api:latest -o "$EXPORT_DIR/rag-api.tar"
echo " 压缩 rag-api 镜像..."
gzip -9 "$EXPORT_DIR/rag-api.tar"
echo ""
echo "3. 导出 chromadb 镜像..."
# 获取 chromadb 镜像的实际标签
CHROMA_TAG=$(docker images chromadb/chroma --format "{{.Repository}}:{{.Tag}}" | head -1)
if [ -z "$CHROMA_TAG" ]; then
echo "Error: 无法找到 chromadb 镜像"
exit 1
fi
docker save "$CHROMA_TAG" -o "$EXPORT_DIR/chromadb.tar"
echo " 压缩 chromadb 镜像..."
gzip -9 "$EXPORT_DIR/chromadb.tar"
echo ""
echo "4. 导出 soffice-service 镜像..."
docker save rag-soffice-service:latest -o "$EXPORT_DIR/soffice.tar"
echo " 压缩 soffice-service 镜像..."
gzip -9 "$EXPORT_DIR/soffice.tar"
echo ""
echo "5. 创建迁移说明文件..."
cat > "$EXPORT_DIR/README.txt" << 'README_EOF'
Docker 镜像迁移说明
==================
包含的镜像:
1. rag-api.tar.gz - RAG API 服务镜像 (gzip压缩)
2. chromadb.tar.gz - ChromaDB 向量数据库镜像 (gzip压缩)
3. soffice.tar.gz - SOffice Service 镜像 (gzip压缩)
迁移步骤:
---------
1. 将以下文件复制到目标机器:
- docker-images-export/ 目录(包含所有 .tar.gz 文件)
- .env 文件(环境变量配置)
- databases_config.json 文件(如果使用多数据库配置)
- docker-run.sh 脚本(启动脚本)
2. 在目标机器上加载镜像:
cd docker-images-export
docker load -i rag-api.tar.gz
docker load -i chromadb.tar.gz
docker load -i soffice.tar.gz
3. 在目标机器上启动服务:
# 确保 .env 和 databases_config.json 在项目根目录
chmod +x docker-run.sh
./docker-run.sh
4. 查看服务状态:
docker ps
docker logs -f rag-api
docker logs -f rag-chromadb
docker logs -f rag-soffice
注意事项:
---------
- 确保目标机器已安装 Docker
- 确保 .env 文件中的配置(如 MySQL、Ollama 地址)适合目标机器
- ChromaDB 数据会存储在 ./chroma_db_data 目录(需要挂载)
- 日志会存储在 ./logs 目录(需要挂载)
README_EOF
echo ""
echo "=== 导出完成 ==="
echo "导出目录: $EXPORT_DIR/"
echo "包含文件:"
echo " - rag-api.tar.gz"
echo " - chromadb.tar.gz"
echo " - soffice.tar.gz"
echo " - README.txt"
echo ""
echo "可选: 压缩导出目录以便传输"
echo " tar -czf docker-images-export.tar.gz $EXPORT_DIR"
echo ""
echo "迁移到目标机器后,按照 $EXPORT_DIR/README.txt 中的说明操作"