docker commit 笔记
1、启动一个nginx容器,将其命名为commit_test,并映射到外部的80端口
$ docker run --name commit_test -d -p 80:80 nginx
a65c4f56cb0f18568d328d5fa8e9f14255c201b158f84811145c56716c1e696c
2、通过浏览器访问:http:localhost:80访问
3、进入“commit_test”容器,修改“/usr/share/nginx/html/index.html”
$ docker exec -it commit_test bash
root@a65c4f56cb0f:/# echo '
Hello, Docker!
' > /usr/share/nginx/html/index.html
root@a65c4f56cb0f:/# exit
exit
4、刷新浏览器
7、使用docker history 查看镜像内的历史记录
通过比较nginx:v2和nginx:latest可以发现新增了一层“818ba2acb682” 8、运行新镜像 docker@docker-ubuntu:~$ docker run --name web2 -d -p 81:80 nginx:v2 43a99e485d3063378ee11e2a508c1b7381028704846eae79c1a9d29a88782d74 通过http://localhost:81访问web2的主页
注: 如果仔细观察之前的 docker diff webserver 的结果,你会发现除了真 正想要修改的 /usr/share/nginx/html/index.html 文件外,由于命令的执 行,还有很多文件被改动或添加了。这还仅仅是最简单的操作,如果是安装软件 包、编译构建,那会有大量的无关内容被添加进来,如果不小心清理,将会导致镜 像极为臃肿。 此外,使用 docker commit 意味着所有对镜像的操作都是黑箱操作,生成的镜 像也被称为黑箱镜像,换句话说,就是除了制作镜像的人知道执行过什么命令、怎 么生成的镜像,别人根本无从得知。而且,即使是这个制作镜像的人,过一段时间 后也无法记清具体在操作的。虽然 docker diff 或许可以告诉得到一些线索, 但是远远不到可以确保生成一致镜像的地步。这种黑箱镜像的维护工作是非常痛苦 的。 而且,回顾之前提及的镜像所使用的分层存储的概念,除当前层外,之前的每一层 都是不会发生改变的,换句话说,任何修改的结果仅仅是在当前层进行标记、添 加、修改,而不会改动上一层。如果使用 docker commit 制作镜像,以及后期 修改的话,每一次修改都会让镜像更加臃肿一次,所删除的上一层的东西并不会丢 失,会一直如影随形的跟着这个镜像这会让镜像更加臃肿。 docker commit 命令适用于一些特殊的应用场合,比如被入侵后保存现场等
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
