容器保存为镜像

指令: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

在这里插入图片描述
在这里插入图片描述
迁移的话只需要发送压缩包即可。

Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐