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|查看容器的启动日志