应用容器化后,将数据路径持久化到宿主机中。当应用做迁移后,数据部分也需要进行迁移。
迁移思路:使用 --volumes-from 命令,将容器中
案例: 容器化的postgresql 迁移。
postgres容器中将数据路径部分持久化到本地docker创建的volume中。
ubuntu@ubuntu-Lenovo:~$ docker volume ls|grep postgis
local postgis
ubuntu@ubuntu-Lenovo:~$ docker ps -a|grep postgis
40f1046f40f9 docker.in.zteict.com/official/kartoza/postgis:9.4-2.1 "/bin/sh -c /start..." 9 months ago Up 40 minutes 0.0.0.0:5433->5432/tcp postgis
ubuntu@ubuntu-Lenovo:~$ docker volume ls|grep postgis
local postgis
ubuntu@ubuntu-Lenovo:~$
1、使用busybox将数据部分进行打包。
docker run --rm --volumes-from postgis \
-v $(pwd):/backup \
docker.in.zwxict.com/tools/busybox
tar zcf /backup/backup.tgz -C /var/lib/postgresql ./
postgis: 需要备份的容器名, /var/lib/postgresql 容器中存放的数据路径,对命令的各行进行解释如下:
--rm
表示该容器是一次性环境,生成后就自动删除,我们只需要运行一次备份文件而已
-v $(pwd):/backup
将容器的/backup目录映射到主机当前目录
docker.in.zwxict.com/tools/busybox
镜像名,这里也可以替换为其他镜像
tar zcvf /backup/backup.tgz -C /var/lib/postgresql ./
表示将容器中 /var/lib/postgresql 文件夹的内容打包,并存储在/backup文件夹下,文件名为backup.tgz,结合前面那行-v $(pwd):/backup
就可以实现将 volume 内容打包为宿主机当前目录下的backup.tar文件
-C
参数,避免出现打包的文件包括了我们不需要的目录,比如我们想要打包的是 /var/lib/postgresql
目录下的全部文件,使用了 -C 参数并结合最后的 ./ 可以避免最终生成的 tgz文件解压后包括/var/lib/postgresql
2 将数据压缩包通过scp迁移到指定的服务器上。然后通过busybox把数据压缩包解压到指定的docker创建的volume中。
docker create 命令创造一个仅用于迁移的容器
docker create -v postgis:/data --name for_migrate busybox true
ps: 我们创建一个postgis的volume,映射路径为/data,我们将数据解压到此路径下
解压数据到‘postgis’volume中。
docker run --rm --volumes-from for_migrate -v $(pwd):/backup docker.in.zwxict.com/tools/busybox tar zxf /backup/backup.tgz -C /data
最后启动postgres:
docker run -d --name postgis -p 5433:5432 -v postgis:/var/lib/postgresql -e ALLOW_IP_RANGE=0.0.0.0 docker.in.zteict.com/official/kartoza/postgis:9.4-2.1
网友评论