Docker容器的备份与迁移
Docker容器的备份与迁移容器保存为镜像无目录挂载-容器保存为镜像有目录挂载情况-容器保存为镜像tomcat目录挂载方法mysql拷贝方法备份镜像镜像恢复迁移容器保存为镜像指令:docker commit [-m=“提交的描述信息”] [-a=“创建者”] 容器名称|容器ID 生成的镜像名[:标签名]这里有无挂载目录是有区别的。查看容器有没有挂载目录:docker inspect -...
容器保存为镜像
指令:docker commit [-m=“提交的描述信息”] [-a=“创建者”] 容器名称|容器ID 生成的镜像名[:标签名]
这里有无挂载目录是有区别的。
查看容器有没有挂载目录:docker inspect --format=’{{.Mounts}}’ 容器名
例如:mycentos无挂载
tomcat有挂载目录
无目录挂载-容器保存为镜像
进入centos容器在opt/文件夹里创建test.txt文件
由上图可知centos无挂载目录。
把centos保存为镜像:docker commit mycentos mycentos_new:1
mycentos 是容器名称
mycentos_new 是新的镜像名称,后面是版本号,可以省略,省略则默认为最新版本。
此镜像的内容就是你当前容器的内容,接下来你可以用此镜像再次运行新的容器。
发现文件已经存在了。
有目录挂载情况-容器保存为镜像
由以上可知tomcat容器中与宿主机映射的文件夹有相同的文件。首先我们用以上的方法,把容器保存为镜像。
然后再运行这个容器。
OK,发现里面的项目没有了,因为宿主机与容器做了路径映射,再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 )。
tomcat目录挂载方法
先拷贝一份挂载的目录文件
cp /usr/local/project /usr/local/baseProject -rf
保存tomcat容器为镜像
docker commit -m=有目录挂载第一次提交 -a=haogenmin mytomcat tomcat_new:1
运行容器:
docker run -it --name=mytomcat_new -p 10010:8080 -v /usr/local/baseProject:/usr/local/tomcat/webapps --privileged=true tomcat_new:1 /bin/bash
项目文件已经同步成功
mysql拷贝方法
先运行一个sql容器,可以发现虽然没有做目录映射,但是宿主机默认做了这一步。
/var/lib/docker/volumes/9d727ed8bfced3b2bcb382bfad934cf4c9f4444481da38dd29f30ef6da3f47c3/_data
》/var/lib/mysql
我们连接这个mysql并新建一个库和student表
保存为镜像
运行这个新的镜像
docker run -id --name=dockersql_new -p 10086:3306 -e MYSQL_ROOT_PASSWORD=123456 mysql_new:1
连接新的mysql
发现没有docker库
我们把原来mysql的文件拷贝新的数据库中。
刷新,发现有了docker库,但是打不开。
重启数据库:docker restart dockersql_new
数据拷贝成功
备份镜像
打包命令:docker save -o mycentos.tar mysql_new:1
-o 指定输出到的文件
镜像恢复迁移
恢复命令:docker load -i mysql_new.tar
迁移的话只需要发送压缩包即可。
更多推荐
所有评论(0)