Docker中数据迁移案例

1、操作环境

win7系统,dockertoolbox,mysql5.6,MySQL-Front。虚拟机名称及地址分别为:default(192.168.99.100);my-machine(191.168.99.101)

相关命令:docker-machinecreate --driver virtualbox my-machine|创建虚拟机

 

2、数据迁移涉及命令整理

总体步骤:数据转移,文件导出及导入,运行新容器。原容器的启动命令为:

docker run --name mysql-docker -v $PWD/mysql:/var/lib/mysql -p3306:3306 -e MYSQL_ALLOW_EMPTY_PASSWORD=yes -d mysql:5.6,采用当前目录下的文件夹mysql作为外挂数据卷(当前目录为实体机中的目录)。

         使用MySQL-Front连接default中mysql,创建数据库mysqldk—创建表user—在表中插入数据。

 

2.1持久化镜像commit-save-load

Ø  cp -r mysql mysql-docker|复制文件夹,转移数据

Ø  docker commitmysql-docker mysql:docker|提交镜像

Ø  docker savemysql:docker > mysql-docker.tar|镜像另存

Ø  eval "$(docker-machine env my-machine)"|切换虚拟机

Ø  docker load <mysql-docker.tar|加载镜像

Ø  docker run --name mysql-docker -v $PWD/mysql-docker:/var/lib/mysql-p 3306:3306 -d mysql:5.6

不进行环境变量的设置,使用之前的设置

 

2.2持久化容器export-import

Ø  cp -r mysql mysql-docker|复制文件夹,转移数据

Ø  docker inspect -f{{.Config.Cmd}} mysql-docker|查看Command参数

Ø  docker exportmysql-docker > mysql-docker.tar|导出容器快照

Ø  eval "$(docker-machine env my-machine)"|切换虚拟机

Ø  docker importmysql-docker.tar mysql:docker|导入容器快照,为生产镜像设定名称及tag,否则两者信息为none

Ø  docker run --name mysql-docker -v $PWD/mysql-docker:/var/lib/mysql-p 3306:3306 -e MYSQL_ALLOW_EMPTY_PASSWORD=yes -d mysql:docker mysqld|最后为Command参数

说明:import方式导入镜像运行时必须加command参数,否则报错“Errorresponse from daemon: No command specified”,可参考http://blog.csdn.net/clj198606061111/article/details/50450793

 

两种数据迁移方式的区别:save-load方式可保存容器的修改的历史记录,export-import方式只保存容器的运行状态(docker history imageName|查看镜像的历史记录),前者包含信息丰富,后者导出文件体积较小。数据迁移前后数据库截图如下:

 

 

 

2.3数据卷及DockerFfile

如果启动容器时不使用外挂数据卷,然后新建库表,当进行commit、save、export等操作时,生成的文件中不会包含新建的库表。

使用镜像mysql:5.6启动容器后,默认使用容器中的/var/lib/mysql目录作为数据卷,而数据卷不会作为容器文件系统的一部分去处理,因而commit、save、export等操作都不会保存新建的库表,容器启动时加挂外置数据卷可便于数据的迁移。

镜像mysql:5.6的创建文件Dockerfile中有如下信息:

FROMdebian:jessie

VOLUME/var/lib/mysql

FROM项表示镜像创建的基础镜像为debian:jessie,VOLUME表示容器的数据卷为/var/lib/mysql。

参考文章:

https://github.com/docker-library/mysql/issues/44

https://gist.github.com/thaJeztah/8d0e901bd21329d80cf2

 

3、附注

1、远程拷贝

Ø  scp local_file remote_username@remote_ip:remote_folder|直接使用scp命令需要输入远程机器对应的密码。

Ø  Docker-machine scp default:/home/mysql-docker.tar my-machine:/home/|Dockerscp命令不需要密码

2、docker logs CONTAINER|查看容器的启动日志

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值