Docker备份与迁移
容器保存为镜像
通过以下命令将容器保存为镜像:
docker commit [-m="提交的描述信息"] [-a="创建者"] 容器名称|容器ID 生成的镜像名[:标签名]
1.无目录挂载-容器保存为镜像
docker inspect --format='{{.Mounts}}' 容器名
mycentos2 容器无数据目录挂载,保存为镜像方式如下:
docker commit mycentos2 mycentos_new:1.1
mycentos2 是容器名称
mycentos_new 是新的镜像名称
此镜像的内容就是你当前容器的内容,接下来你可以用此镜像再次运行新的容器
创建并登录容器
docker run -it --name=mxg_mycentos_new mycentos_new:1.1 /bin/bash
在第5.6章节向 mycentos2 容器中添加了mengxuegu文件,所以新的容器中也有此文件,如下:
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 )。