docker的容器加了里面新文件,commit之后新的镜像会有这个文件吗
结论是可以的。
下面是实验过程:
我们把一个springboot做成了image。这个springboot主要有两个功能,接收参数并打印和新建文件。
@GetMapping("/params")
@ResponseBody
public String getParams(HttpServletRequest request) {
String name = request.getParameter("name");
Map<String, String[]> parameterMap = request.getParameterMap();
for (Map.Entry<String, String[]> entry : parameterMap.entrySet()) {
System.out.println("key is "+entry.getKey()+" value is "+ Arrays.toString(entry.getValue()));
}
System.out.println(name);
return "success";
}
@GetMapping("/writeTxt")
@ResponseBody
public String writeTxt() throws Exception{
File file = new File("runoob.txt");
BufferedWriter out = new BufferedWriter(new FileWriter(file));
out.write("菜鸟教程");
out.close();
System.out.println("文件创建成功!address: "+file.getAbsolutePath());
return "success!!!";
}
然后我们在本地调用/params看看能不能调通,能调通再去调用/writeTxt,得到打印结果。
然后我们打开另一个终端,交互方式进入容器,查看文件。
结果是有这个文件的。inspect一下看看挂载。
Mounts是没有元素的。下面我们把这个容器commit。
然后运行一下这个新容器,看他里面有没有 runboob.txt 。
执行:
docker run -it -P --name springboot-test-add-txt01 05120e06b644 /bin/bash
然后exec进入容器查看。
也会有这个文件。
下面我们把这个image push,然后删除本地镜像,再pull下来,看看会不会存在 runboob.txt。
首先得把镜像改名:
然后我们push:
这里push之后search好几次都查不到,但是前一天push的Tomcat能查到,可能是没更新?但是网页的dockerhub能查到,后面的pull也能pull下来。
然后我们删除镜像,只留剩下几个:
pull:
run新镜像:
这里只是测试一下接口是不是通的,没有新建文件,我们在另一个终端里面查看文件目录。
确实是有数据的。
说明文件添加之后是会一起commit的。