从零开始将项目镜像部署到离线Windows服务器的完整流程
第一阶段:在有网络的环境中准备离线部署包
1. 准备项目文件
# 确保项目目录包含所有必要文件
project/
├── app/ # 应用代码
├── Dockerfile # Docker构建文件
├── docker-compose.yml # 服务编排文件
├── requirements.txt # Python依赖
├── package.json # Node.js依赖(如果有)
├── .env # 环境变量
└── nginx/ # Nginx配置(如果有)
2. 导出Docker镜像
# 查看项目使用的所有镜像
docker-compose config# 导出基础镜像
docker save -o images/python-3.11-slim.tar python:3.11-slim
docker save -o images/mysql-8.0.tar mysql:8.0
docker save -o images/redis-7-alpine.tar redis:7-alpine
docker save -o images/nginx-alpine.tar nginx:alpine# 构建项目镜像
docker-compose build# 导出项目镜像
docker save -o images/my-project.tar my-project_web:latest
3. 下载Docker安装包
# Windows Docker Desktop
# 下载地址:https://desktop.docker.com/win/stable/Docker%20Desktop%20Installer.exe# Docker Compose
# 下载地址:https://github.com/docker/compose/releases
# 选择:docker-compose-windows-x86_64.exe
4. 创建部署脚本
@echo off
REM deploy.bat
echo 开始部署项目...REM 导入Docker镜像
echo 导入镜像...
docker load -i images\python-3.11-slim.tar
docker load -i images\mysql-8.0.tar
docker load -i images\redis-7-alpine.tar
docker load -i images\nginx-alpine.tar
docker load -i images\my-project.tarREM 启动服务
echo 启动服务...
docker-compose up -dREM 检查状态
echo 检查服务状态...
docker-compose psecho 部署完成!
pause
5. 打包所有文件
# 创建部署包
tar -czf my-project-offline.tar.gz \images/ \app/ \Dockerfile \docker-compose.yml \requirements.txt \.env \deploy.bat \README.md
第二阶段:传输到离线Windows服务器
1. 传输方式
# 方式1:U盘传输
# 将 my-project-offline.tar.gz 复制到U盘# 方式2:内网传输
# 如果有内网连接,可以通过网络传输# 方式3:光盘传输
# 将文件刻录到光盘
2. 文件完整性验证
# 在有网络环境生成校验和
md5sum my-project-offline.tar.gz > checksum.md5# 在离线服务器验证
md5sum -c checksum.md5
第三阶段:在离线Windows服务器上部署
1. 安装Docker Desktop
REM 1. 运行Docker Desktop安装程序
Docker Desktop Installer.exe install --quietREM 2. 等待安装完成(约5-10分钟)
timeout /t 600 /nobreakREM 3. 启动Docker Desktop
start "" "C:\Program Files\Docker\Docker\Docker Desktop.exe"REM 4. 等待Docker启动(约2-3分钟)
timeout /t 180 /nobreak
2. 安装Docker Compose
REM 复制Docker Compose到系统路径
copy docker-compose-windows-x86_64.exe C:\Windows\System32\docker-compose.exeREM 验证安装
docker-compose --version
3. 解压部署包
REM 解压部署包
tar -xzf my-project-offline.tar.gzREM 进入项目目录
cd my-project
4. 导入Docker镜像
REM 导入所有镜像
echo 导入Docker镜像...docker load -i images\python-3.11-slim.tar
if %errorlevel% neq 0 (echo 导入python镜像失败pauseexit /b 1
)docker load -i images\mysql-8.0.tar
if %errorlevel% neq 0 (echo 导入mysql镜像失败pauseexit /b 1
)docker load -i images\redis-7-alpine.tar
if %errorlevel% neq 0 (echo 导入redis镜像失败pauseexit /b 1
)docker load -i images\nginx-alpine.tar
if %errorlevel% neq 0 (echo 导入nginx镜像失败pauseexit /b 1
)docker load -i images\my-project.tar
if %errorlevel% neq 0 (echo 导入项目镜像失败pauseexit /b 1
)echo 所有镜像导入完成!
5. 配置环境变量
REM 创建.env文件(如果不存在)
if not exist .env (echo 创建环境配置文件...echo MYSQL_PASSWORD=DVADMIN3 > .envecho REDIS_PASSWORD=DVADMIN3 >> .envecho DATABASE_HOST=mysql >> .envecho REDIS_HOST=redis >> .env
)
6. 启动服务
REM 启动所有服务
echo 启动服务...
docker-compose up -dREM 等待服务启动
echo 等待服务启动...
timeout /t 30 /nobreakREM 检查服务状态
echo 检查服务状态...
docker-compose ps
7. 验证部署
REM 检查容器状态
docker psREM 检查服务日志
docker-compose logs --tail=20REM 测试服务连通性
curl -f http://localhost/health
if %errorlevel% equ 0 (echo 服务部署成功!
) else (echo 服务可能有问题,请检查日志docker-compose logs
)
第四阶段:故障排除和优化
1. 常见问题解决
REM 问题1:Docker Desktop启动失败
REM 解决:检查Windows版本、虚拟化是否开启REM 问题2:端口被占用
REM 解决:修改docker-compose.yml中的端口映射REM 问题3:内存不足
REM 解决:调整Docker Desktop内存限制REM 问题4:镜像导入失败
REM 解决:检查镜像文件完整性,重新导入
2. 性能优化
REM 调整Docker Desktop资源
REM - 内存:至少4GB
REM - CPU:至少2核
REM - 磁盘:至少20GB可用空间REM 优化容器配置
REM - 设置内存限制
REM - 配置日志轮转
REM - 启用健康检查
3. 监控和维护
REM 查看服务状态
docker-compose psREM 查看日志
docker-compose logs -fREM 重启服务
docker-compose restartREM 停止服务
docker-compose downREM 更新服务
docker-compose pull
docker-compose up -d
第五阶段:备份和恢复
1. 数据备份
REM 备份数据库
docker exec mysql mysqldump -u root -p myapp > backup.sqlREM 备份配置文件
copy .env backup\env_backup.txtREM 备份整个项目
tar -czf backup\project_backup_%date%.tar.gz *
2. 数据恢复
REM 恢复数据库
docker exec -i mysql mysql -u root -p myapp < backup.sqlREM 恢复配置文件
copy backup\env_backup.txt .env
完整的部署脚本示例
一键部署脚本
@echo off
REM offline-deploy.bat
echo ========================================
echo 离线Windows服务器部署脚本
echo ========================================REM 检查Docker是否安装
docker --version >nul 2>&1
if %errorlevel% neq 0 (echo 错误:Docker未安装,请先安装Docker Desktoppauseexit /b 1
)REM 检查Docker是否运行
docker info >nul 2>&1
if %errorlevel% neq 0 (echo 错误:Docker未运行,请启动Docker Desktoppauseexit /b 1
)echo Docker环境检查通过REM 导入镜像
echo 开始导入Docker镜像...
for %%f in (images\*.tar) do (echo 导入: %%fdocker load -i "%%f"if !errorlevel! neq 0 (echo 导入失败: %%fpauseexit /b 1)
)echo 镜像导入完成REM 创建必要目录
if not exist logs mkdir logs
if not exist data mkdir dataREM 启动服务
echo 启动服务...
docker-compose up -dREM 等待服务启动
echo 等待服务启动...
timeout /t 45 /nobreakREM 检查服务状态
echo 检查服务状态...
docker-compose psREM 健康检查
echo 执行健康检查...
curl -f http://localhost/health >nul 2>&1
if %errorlevel% equ 0 (echo ========================================echo 部署成功!服务已启动echo 访问地址:http://localhostecho ========================================
) else (echo ========================================echo 部署可能有问题,请检查日志echo ========================================docker-compose logs --tail=20
)pause
总结
离线Windows服务器部署的关键步骤:
- 准备阶段:导出镜像、下载依赖、创建脚本
- 传输阶段:打包文件、传输到目标服务器
- 安装阶段:安装Docker Desktop、Docker Compose
- 部署阶段:导入镜像、启动服务、验证部署
- 维护阶段:监控服务、备份数据、故障排除
这个流程确保了在没有网络连接的情况下,能够完整地将项目部署到Windows服务器上。