记录生产过程中----迁移docker 镜像到新服务器


迁移步骤详解

要将 /home/docker/song-schedule 完整迁移到新服务器,需确保 代码、数据、镜像、配置 的一致性。以下是具体操作流程:


1. 在旧服务器上准备迁移文件
1.1 打包项目目录

# 进入项目目录
cd /home/docker
# 压缩整个目录(包含子目录和隐藏文件)
tar czvf song-schedule.tar.gz song-schedule/

1.2 导出 Docker 镜像
由于服务依赖本地构建的镜像(如 super-nginx:001super-mall-admin-server:v001),需将镜像导出为文件:

# 列出所有相关镜像
docker images | grep -E "super-nginx|super-mall-admin-server|super-notes-server"

# 导出镜像(示例)
docker save -o super-nginx-001.tar super-nginx:001
docker save -o super-mall-admin-server-v001.tar super-mall-admin-server:v001
docker save -o super-notes-server-v002.tar super-notes-server:v002

1.3 复制文件到新服务器
将以下文件通过 scprsync 传输到新服务器的相同路径(如 /home/docker):
song-schedule.tar.gz

• 导出的镜像文件(super-nginx-001.tar 等)

• 证书目录 /home/cert(如果新服务器没有证书需同步)

• 挂载的日志和文件目录(如 /mnt/logs

# 示例:使用 scp 传输
scp song-schedule.tar.gz root@新服务器IP:/home/docker/
scp /home/cert/* root@新服务器IP:/home/cert/
scp /mnt/logs/song-schedule/* root@新服务器IP:/mnt/logs/song-schedule/

2. 在新服务器上恢复环境
2.1 解压项目目录

# 进入目标目录
cd /home/docker
# 解压文件
tar xzvf song-schedule.tar.gz

2.2 加载 Docker 镜像

# 加载镜像(需在解压后的目录外操作)
docker load -i super-nginx-001.tar
docker load -i super-mall-admin-server-v001.tar
docker load -i super-notes-server-v002.tar

# 验证镜像是否加载成功
docker images | grep -E "super-nginx|super-mall-admin-server|super-notes-server"

2.3 创建必要目录
检查所有挂载的宿主机目录是否存在:

# 创建日志目录
mkdir -p /mnt/logs/song-schedule/{file,super-mall-admin,super-notes}

# 创建文件存储目录
mkdir -p /home/docker/song-schedule/file/defaultBucketName

# 设置目录权限(避免容器无权限写入)
chmod -R 755 /mnt/logs /home/docker/song-schedule

3. 修改配置适配新环境
检查 docker-compose.yml 中以下内容是否需调整:
3.1 路径一致性
• 确保所有挂载的 宿主机路径 在新服务器存在(如 /home/cert/mnt/logs)。

• 如果新服务器路径不同,需修改 volumes 部分(例如将 /home/cert 改为 /etc/nginx/cert)。

3.2 端口冲突
检查新服务器的端口是否被占用(如 8084-8087、8090):

netstat -tuln | grep -E "8084|8085|8086|8087|8090"

若端口冲突,修改 ports 配置(如 "8088:443")。

3.3 证书配置
确保 /home/cert 目录包含有效的 SSL 证书文件(如 cert.pemkey.pem),且文件名与 Nginx 配置中的路径一致。


4. 启动服务

# 进入项目目录
cd /home/docker/song-schedule

# 启动所有服务(使用 -d 后台运行)
docker-compose up -d

# 查看服务状态
docker-compose ps

# 检查容器日志(示例)
docker-compose logs super-web-nginx

5. 验证迁移结果

  1. 访问服务:
    • 通过浏览器或 curl 测试 HTTPS 端口(如 https://新服务器IP:8086)。
  2. 检查数据持久化:
    • 确认 /mnt/logs/home/docker/song-schedule/file 中有新日志和文件生成。
  3. 监控容器状态:
docker ps -a | grep "song-schedule"

常见问题处理
• 问题1:容器启动失败,提示 “No such file or directory”

• 原因:挂载的宿主机目录不存在或权限不足。

• 解决:检查目录路径和权限,确保与 docker-compose.yml 一致。

• 问题2:Nginx 报错 “SSL certificate not found”

• 原因:证书文件未正确挂载到容器。

• 解决:确认 /home/cert 中有证书文件,且容器内路径 /etc/nginx/cert 映射正确。

• 问题3:端口冲突

• 解决:修改 docker-compose.yml 中的宿主机端口(如 "8091:443"),然后重启服务:

```bash
docker-compose down && docker-compose up -d

---

**迁移后优化建议**

1. 使用 Docker Registry:将镜像推送到私有仓库(如 Harbor),避免手动导出导入。
2. 环境变量化配置:将路径、端口等提取到 `.env` 文件,便于跨环境管理:

```properties
# .env 文件示例
CERT_PATH=/home/cert
LOG_PATH=/mnt/logs

docker-compose.yml 中引用:

volumes:
  - ${CERT_PATH}:/etc/nginx/cert
  1. 日志集中管理:使用 ELK 或 Grafana Loki 收集容器日志,替代直接挂载日志目录。

通过以上步骤,您可以完整迁移服务并确保数据一致性。如果遇到问题,可通过 docker-compose logs <服务名> 查看详细错误日志。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值