# Docker镜像打包和部署工具

本目录包含用于Docker镜像打包和OpenEuler服务器部署的完整工具集。

## 脚本概览

### 核心脚本

1. **export-images.sh** - Docker镜像导出脚本
2. **compress-and-verify.sh** - 镜像压缩和完整性检查脚本
3. **import-and-verify.sh** - 镜像导入和验证脚本
4. **deploy-to-openeuler.sh** - OpenEuler服务器部署脚本
5. **one-click-deploy.sh** - 一键部署脚本

### 文档

- **DEPLOYMENT_GUIDE.md** - 详细部署指南
- **PACKAGING_README.md** - 本文件

## 快速开始

### 1. 导出镜像

```bash
# 基本导出
./docker/export-images.sh

# 导出并压缩，验证完整性
./docker/export-images.sh -c -v

# 导出到指定目录
./docker/export-images.sh -o /path/to/export -c -v
```

### 2. 压缩和验证

```bash
# 压缩现有镜像文件
./docker/compress-and-verify.sh

# 仅验证文件完整性
./docker/compress-and-verify.sh --verify-only

# 解压缩文件
./docker/compress-and-verify.sh --uncompress
```

### 3. 导入镜像

```bash
# 导入镜像文件
./docker/import-and-verify.sh /path/to/images

# 强制导入并测试
./docker/import-and-verify.sh -f --test-run

# 仅验证不导入
./docker/import-and-verify.sh --verify-only
```

### 4. 部署到OpenEuler

```bash
# 全新部署
sudo ./docker/deploy-to-openeuler.sh /path/to/images

# 更新现有部署
sudo ./docker/deploy-to-openeuler.sh -u /path/to/images

# 备份并部署
sudo ./docker/deploy-to-openeuler.sh -b /path/to/images
```

### 5. 一键部署

```bash
# 导出镜像
./docker/one-click-deploy.sh export -c -v

# 部署到服务器
./docker/one-click-deploy.sh deploy --server 192.168.1.100

# 完整流程
./docker/one-click-deploy.sh full -c --server 192.168.1.100
```

## 典型工作流程

### 开发环境 → 生产环境

1. **在开发环境导出镜像**
   ```bash
   ./docker/export-images.sh -c -v -o ./docker-images
   ```

2. **传输到生产服务器**
   ```bash
   scp -r docker-images/ user@server:/tmp/
   ```

3. **在生产服务器部署**
   ```bash
   sudo ./docker/deploy-to-openeuler.sh /tmp/docker-images
   ```

### 离线部署流程

1. **准备镜像包**
   ```bash
   ./docker/export-images.sh -c -v
   ./docker/compress-and-verify.sh -c 9
   ```

2. **物理传输到目标环境**

3. **导入和部署**
   ```bash
   ./docker/import-and-verify.sh -f --test-run
   sudo ./docker/deploy-to-openeuler.sh --skip-images
   ```

## 脚本选项说明

### export-images.sh 选项

- `-c, --compress`: 启用gzip压缩
- `-v, --verify`: 导出后验证完整性
- `-o, --output DIR`: 指定导出目录
- `--custom-images`: 导出指定镜像列表
- `--skip-build`: 跳过镜像构建

### compress-and-verify.sh 选项

- `-c, --compress-level N`: 压缩级别 (1-9)
- `-k, --keep-original`: 保留原始文件
- `-v, --verify-only`: 仅验证不压缩
- `-u, --uncompress`: 解压缩文件
- `--parallel N`: 并行处理数量

### import-and-verify.sh 选项

- `-v, --verify-only`: 仅验证不导入
- `-f, --force`: 强制导入覆盖现有镜像
- `-c, --check-manifest`: 检查清单文件
- `--skip-compatibility`: 跳过兼容性检查
- `--test-run`: 导入后运行测试

### deploy-to-openeuler.sh 选项

- `-d, --deploy-dir DIR`: 部署目录
- `-b, --backup`: 部署前备份
- `-u, --update`: 更新现有部署
- `-r, --rollback`: 回滚到上一版本
- `--skip-docker-install`: 跳过Docker安装
- `--dry-run`: 仅显示操作不执行

## 生成的文件

### 导出过程生成

- `docker-images/` - 镜像文件目录
- `images-manifest.txt` - 镜像清单文件
- `import-images.sh` - 自动生成的导入脚本
- `export.log` - 导出日志

### 部署过程生成

- `/opt/knowledge-base/` - 默认部署目录
- `.env` - 环境配置文件
- `storage/` - 持久化存储目录
- `/var/log/knowledge-base-deploy.log` - 部署日志

## 故障排除

### 常见问题

1. **权限错误**
   ```bash
   sudo chown -R $USER:$USER docker-images/
   chmod +x docker/*.sh
   ```

2. **Docker未运行**
   ```bash
   sudo systemctl start docker
   sudo systemctl enable docker
   ```

3. **磁盘空间不足**
   ```bash
   docker system prune -a
   df -h
   ```

4. **网络连接问题**
   ```bash
   ping target-server
   ssh user@target-server
   ```

### 日志查看

```bash
# 查看导出日志
tail -f docker-images/export.log

# 查看部署日志
sudo tail -f /var/log/knowledge-base-deploy.log

# 查看Docker日志
docker compose logs -f
```

## 最佳实践

1. **始终验证镜像完整性**
2. **在生产部署前进行测试**
3. **定期备份重要数据**
4. **监控系统资源使用**
5. **保持脚本和文档更新**

## 支持的平台

- **源平台**: Linux/macOS (开发环境)
- **目标平台**: OpenEuler 20.03 LTS+
- **架构**: x86_64 (amd64)
- **Docker**: 20.10+
- **Docker Compose**: 2.0+

---

更多详细信息请参考 `DEPLOYMENT_GUIDE.md`。