Docker数据备份与迁移(MYSQL,Tomcat)

通过以下命令将容器保存为镜像

docker commit [-m="提交的描述信息"] [-a="创建者"] 容器名称|容器ID 生成的镜像名[:标签名]

无目录挂载-容器保存为镜像

查看是否有挂载目录

docker inspect --format='{
    {.Mounts}}' 容器名

Docker数据备份与迁移(MYSQL,Tomcat)_第1张图片
无目录挂载的容器打包为镜像

docker commit -m="jianghaojie Frist" -a="jhj" jhj newjhj:1.1

查看版本号
Docker数据备份与迁移(MYSQL,Tomcat)_第2张图片

有挂载目录的容器保存为镜像

问题: 如果Docker对容器挂载了数据目录, 在将容器保存为镜像时,数据不会被保存到镜像中。
原因:因为宿主机与容器做了路径映射,再commit一个新的镜像时,该路径下的所有数据都会被抛弃,不会
被保存到新镜像中。可通过 docker inspect --format=’{ {.Mounts}}’ 镜像名 查看是否有目录挂载.
解决:
目录挂载方法。先把在宿主机的数据备份在某个目录下,在 docker run 的时候使用-v参数将宿主机上的目录映射到容器里的目标路径中(tomcat是 /usr/local/tomcat/webapps ,mysql是 var/lib/mysql )
拷贝方法。先把在宿主机的数据备份在某个目录下,通过拷贝的方法 docker cp 将备份的数据复制进容器里的目标路径中(tomcat是 /usr/local/tomcat/webapps ,mysql是 var/lib/mysql )。
(1)查看有挂载目录容器的映射文件的地址

 docker inspect --format='{
    {.Mounts}}' jhjTomcat 

前面一个是宿主机映射文件地址,后面一个是容器的映射文件地址
在这里插入图片描述
(2)将有目录挂载的容器保存为镜像

docker commit jhjTomcat jhjnewTomcat:1.1

Docker数据备份与迁移(MYSQL,Tomcat)_第3张图片
(3)创建新的守护式容器使用复制的地址和新的镜像

docker run -id --name=jhjnewTomcat -p 8081:8080 -v /usr/local/localproject:/usr/local/tomcat/webapps jhjnewtomcat:1.1

这样有挂载目录的容器也能生成
Docker数据备份与迁移(MYSQL,Tomcat)_第4张图片

备份MySQL容器

1.为什么mysql容器是目录挂载的容器
下面是mysql容器创建时候的命令如下,可以看出没有-v目录映射的文件,但是其实docker在创建mysql的时候已经将mysql的数据做了目录映射

docker run -id --name=jhjMysql -p 33306:3306 -e MYSQL_ROOT_PASSWORD=123456 mysql:5.7

2.查看mysql的目录映射

docker inspect --format='{
    {.Mounts}}' jhjMysql 

在这里插入图片描述
3现在先将宿主机mysql的数据备份
使用 cp -rf 宿主机原生的路径 空格 /mysql(宿主机备份路径)

 cp -rf /var/lib/docker/volumes/8715c16052a4a344ee083bdb7ec7842f71697c2e3d4316d4e117fb2dd4c834cc/_data /mysql

在这里插入图片描述
Docker数据备份与迁移(MYSQL,Tomcat)_第5张图片
4将原本的mysql容器生成镜像(当然因为是目录挂载容器,生成的镜像没有打包带走原生的mysql数据)
(1)提交生成新的mysql镜像文件newmysqljx

docker commit jhjMySQL newmysqljx:1.1

Docker数据备份与迁移(MYSQL,Tomcat)_第6张图片
5使用生成的镜像创建新的容器并使用Navicat连接

docker run -id --name=newjhjMySQL -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 newmysqljx:1.1

可以看出上面那个新建的数据库比起下面那个少了testDockermysql这个数据库
Docker数据备份与迁移(MYSQL,Tomcat)_第7张图片
6拷贝保存的文件并覆盖新的容器存储目录
docker cp 宿主机文件目录 空格 容器名:将要拷贝到的目录

docker cp /mysql/ newjhjMySQL:/var/lib/

7重启新的docker容器

docker restart  newjhjMySQL

将数据库刷新则可以看见拷贝过来的文件
Docker数据备份与迁移(MYSQL,Tomcat)_第8张图片

你可能感兴趣的:(Docker数据备份与迁移(MYSQL,Tomcat))