记录生产过程中----迁移docker 镜像到新服务器
迁移步骤详解
要将 /home/docker/song-schedule
完整迁移到新服务器,需确保 代码、数据、镜像、配置 的一致性。以下是具体操作流程:
1. 在旧服务器上准备迁移文件
1.1 打包项目目录
# 进入项目目录
cd /home/docker
# 压缩整个目录(包含子目录和隐藏文件)
tar czvf song-schedule.tar.gz song-schedule/
1.2 导出 Docker 镜像
由于服务依赖本地构建的镜像(如 super-nginx:001
、super-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 复制文件到新服务器
将以下文件通过 scp
或 rsync
传输到新服务器的相同路径(如 /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.pem
和 key.pem
),且文件名与 Nginx 配置中的路径一致。
4. 启动服务
# 进入项目目录
cd /home/docker/song-schedule
# 启动所有服务(使用 -d 后台运行)
docker-compose up -d
# 查看服务状态
docker-compose ps
# 检查容器日志(示例)
docker-compose logs super-web-nginx
5. 验证迁移结果
- 访问服务:
• 通过浏览器或curl
测试 HTTPS 端口(如https://新服务器IP:8086
)。 - 检查数据持久化:
• 确认/mnt/logs
和/home/docker/song-schedule/file
中有新日志和文件生成。 - 监控容器状态:
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
- 日志集中管理:使用 ELK 或 Grafana Loki 收集容器日志,替代直接挂载日志目录。
通过以上步骤,您可以完整迁移服务并确保数据一致性。如果遇到问题,可通过 docker-compose logs <服务名>
查看详细错误日志。