一、镜像迁移
1. 在旧服务器上操作
-
查看当前运行的容器
docker ps
找到你的项目容器,记录对应的
IMAGE
名称和标签(如myapp:latest
)。 -
导出镜像为文件
docker save -o myapp.tar myapp:latest
-o myapp.tar
:将镜像保存为myapp.tar
文件。myapp:latest
:替换为你的镜像名称和标签。
-
传输镜像文件到新服务器
scp myapp.tar user@新服务器IP:/目标路径/
user
:新服务器的用户名。/目标路径/
:建议传送到用户目录如/home/user/
。
2. 在新服务器上操作
-
导入镜像
docker load -i /home/user/myapp.tar
-i
:指定导入的文件路径。
-
验证镜像
docker images
确认镜像已成功导入。
二、数据卷迁移
1. 在旧服务器上操作
-
查找容器使用的数据卷
docker inspect 容器名称或ID
在输出的
Mounts
部分找到数据卷在宿主机上的路径(如/var/lib/docker/volumes/volume_name/_data
)。 -
打包数据卷内容
sudo tar -czvf data_volume.tar.gz /var/lib/docker/volumes/volume_name/_data
-
传输数据文件到新服务器
scp data_volume.tar.gz user@新服务器IP:/home/user/
2. 在新服务器上操作
-
创建新数据卷
docker volume create mydata
mydata
是数据卷名称,可自定义。 -
解压数据到新数据卷
sudo tar -xzvf /home/user/data_volume.tar.gz -C /var/lib/docker/volumes/mydata/_data
- 确保目标路径存在,若不存在需先创建目录。
三、启动容器
在新服务器上运行以下命令(根据你的容器参数调整):
docker run -d \
--name myapp \
-p 80:80 \
-v mydata:/容器内数据路径 \
myapp:latest
-d
:后台运行。--name
:容器名称。-p
:端口映射(宿主机端口:容器端口)。-v
:挂载数据卷(mydata
是新数据卷名称)。
四、使用 Docker Compose(可选)
如果旧服务器使用 docker-compose.yml
:
-
将旧服务器的
docker-compose.yml
复制到新服务器:scp docker-compose.yml user@新服务器IP:/home/user/
-
在新服务器启动服务:
docker-compose up -d
注意事项
-
停止旧服务:迁移前建议停止旧容器,避免数据不一致:
docker stop 容器名称或ID
-
端口冲突:确保新服务器的端口(如
80
)未被占用。 -
镜像版本:如果镜像已推送到 Docker Hub 或私有仓库,可直接在新服务器拉取:
docker pull 用户名/仓库名:标签
-
权限问题:数据卷操作可能需要
sudo
权限。
按照以上步骤操作,即可完成项目迁移。遇到具体问题时,可结合错误信息调整命令参数。