当前位置: 首页 > news >正文

从零开始将项目镜像部署到离线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服务器部署的关键步骤:

  1. 准备阶段:导出镜像、下载依赖、创建脚本
  2. 传输阶段:打包文件、传输到目标服务器
  3. 安装阶段:安装Docker Desktop、Docker Compose
  4. 部署阶段:导入镜像、启动服务、验证部署
  5. 维护阶段:监控服务、备份数据、故障排除

这个流程确保了在没有网络连接的情况下,能够完整地将项目部署到Windows服务器上。

http://www.dtcms.com/a/321074.html

相关文章:

  • ADB打印设备日志相关
  • GPT-5 全面解析与 DeepSeek 实战对比:推理、工具调用、上下文与成本
  • 十三、抽象队列同步器AQS
  • luckfox开发板的usb口作为串口使用
  • 【matlab】采样信号的低通滤波、高通滤波
  • SVN下载及安装(保姆级别)
  • 【网络运维】Linux:MariaDB 数据库介绍及管理
  • 6、图片上方添加波浪效果
  • 深入探索 PDF 数据提取:PyMuPDF 与 pdfplumber 的对比与实战
  • Dubbo应用开发之基于xml的第一个Dubbo程序
  • 第五十五章:AI模型的“专属定制”:LoRA微调原理与高效合并技巧
  • Vue 3 表单数据缓存架构设计:从问题到解决方案
  • 站在Vue的角度,对比鸿蒙开发中的数据渲染二
  • Introducing Visual Perception Token into Multimodal Large Language Model论文解读
  • GitHub 趋势日报 (2025年08月07日)
  • 厂区周界人员闯入识别误报率↓76%:陌讯动态监测算法实战解析
  • 全面解析软件工程形式化说明技术
  • 密码学中间人攻击(Man-in-the-Middle):隐藏在通信链中的“窃听者“
  • Block Styler——浏览文件控件
  • zoho crm 的用户为什么在 api 名称页面不能点进模块查看字段的 api 名称
  • 解析工业机器视觉中的飞拍技术
  • 高效数据隔离方案:SpringBoot + JSqlParser 全解析!
  • Redis五大数据类型
  • Java——类和对象
  • 数据结构(六):树与二叉树
  • 触觉导航新突破:Contactile 触觉传感器推动机器人 “零示教” 实现复杂曲面作业
  • PyQt简介
  • WinForm 工具箱内容剖析
  • Linux常见服务器配置(三):MariaDB数据库管理和WEB服务器
  • hyper-v虚拟机启动失败:Virtual Pci Express Port无法打开电源,因为发生错误,找不到即插即用设备