Linux下如何完成docker迁移(应用、数据)

Viewed 38

Ubuntu下启用了两个docker容器,一个是web应用,另一个是数据库,之前是通过docker-compose方式安装的容器,如何完整将docker中的应用及数据迁移到新的服务器?

1 Answers

1、在原来的服务器中,通过以下命令查看所有在运行的容器:

sudo docker ps

2、然后分别导出要迁移的应用和数据库容器:

# 导出应用容器
docker commit app_container app_image
docker save -o app_image.tar app_image
# 导出数据库容器
docker commit db_container db_image
docker save -o db_image.tar db_image

3、查看两个应用的数据挂载方式,通过以下命令,查看“Mounts”信息,如果是Type: "bind",那就直接将两个容器的source文件夹打包为data.tar

docker inspect <container_id>

4、将以上三个文件和docker-compose.yml文件通过scp复制到新的服务器,命令如下:


scp -C -P <port> file user@new_server_ip:/path/to/destination

#-C是压缩传输,能极大提升传输速率,-P是指定新服务器的ssh端口

5、按照刚才第3步两个容器的source地址创建相应的文件夹,并将数据文件拷贝到相应的文件夹中。docker-compose.yml文件可按照老服务器的路径在新服务器存放该文件。

6、按照以下命令,在新服务器中安装docker,并加载镜像文件:

# 更新包索引
sudo apt update

# 安装 Docker
sudo apt install -y docker.io

# 启动 Docker 服务并设置开机自启
sudo systemctl start docker
sudo systemctl enable docker

# 安装 Docker Compose
sudo apt install -y docker-compose

# 进入到容器文件存放目录
cd /path/to/destination

# 导入应用镜像
docker load -i app_image.tar

# 导入数据库镜像
docker load -i db_image.tar

7、用“docker image ls”命令查看已经加载的镜像信息;

8、通过vim等编辑工具打开docker-compose.yml,将文件中的“image”信息替换成第7步显示出来对应的“IMAGE”信息,保存文件,其他信息可以根据实际需要调整,但除了端口不建议调整其他信息,否则,上述已经拷贝到相应文件夹的备份数据要重新调整。

9、最后进入到docker-compose.yml所在目录,并采用以下命令启动已经加载的两个容器,应该就大功告成了:

sudo docker-compose up -d

10、若发现页面可以访问,但是一直没有加载数据,可以通过以下命令进行查看日志:


docker logs <database_container_name_or_id>

11、若发现存在“connection database failed:”的错误,需要通过一下命令进入到docker,以MySQL为例:

docker exec -it database_container_name_or_id /bin/bash

12、找到/etc/mysql/my.cnf配置文件(或者其他文件夹下的my.cnf文件),在 my.cnf 中没有看到 bind-address 这一行,没有可以手动添加,以接受来自其他主机(如其他 Docker 容器)的连接,设置如下:

bind-address = 0.0.0.0

13、重启数据库和应用容器,应该就没有问题了:

docker restart <database_container_name_or_id>