一次docker的数据库迁移

前言

网上看到的一个文章,虽然对docker相对比较熟悉。但是没有做过类似的实践,记录一次本地尝试.

正文

之前使用的 MySql 跟 MongoDb 都是基于 Docker 部署的,所以迁移起来还算比较方便,主要思路就是把数据库容器的数据卷单独做成一个数据镜像,然后把这个镜像提交到另一台主机上面的私有仓库,最后用这个镜像生成一个数据容器挂载到应用容器上就好了。

备份数据卷

docker run --rm --volumes-from data-container-backup --name tmp-backup -v $(pwd):/backup ubuntu tar cvf /backup/backup.tar /folderToBackup

#Example: Backup mysql database
docker run --rm --volumes-from blog-mysql --name tmp-backup -v $(pwd):/backup ubuntu tar cvf /backup/backup.tar /var/lib/mysql

--rm 用来创建一个“用完即销”的容器,--volumes-from 用来把一个已有容器上挂载的卷挂载到新创建的容器上

创建数据容器

docker run -d -v $(pwd):/backup --name data-backup alpine /bin/sh -c "cd / && tar xvf /backup/backup.tar"

推送数据容器到私有仓库

docker commit data-backup registry-host:port/data-backup:$VERSION

docker push registry-host:port/data-backup:$VERSION

在另一台主机下载数据容器

docker run -v /folderToBackup --entrypoint "bin/sh" --name data-container registry-host:port/data-backup:${VERSION}

将数据容器里面的数据卷挂载到应用容器上

docker run --volumes-from=data-container registry-host:port/data-backup:${VERSION}

# Example
docker run --name new-mysql -d -p 3306:3306 --volumes-from=data-container registry-host:port/data-backup:${VERSION}

就这样 5 步操作,就可以很方便的备份、迁移数据库了。所以买主机也一定要买支持 Docker 的 KVM 虚拟机啊。

以上

谢谢你请我吃糖果