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、刷新浏览器

注:修改了容器的文件,也就是修改了容器的存储层。可以通过docker diff查看具体的改动 docker@docker-ubuntu:~$ docker diff commit_test C /root A /root/.bash_history C /run A /run/nginx.pid C /usr C /usr/share C /usr/share/nginx C /usr/share/nginx/html C /usr/share/nginx/html/index.html C /var C /var/cache C /var/cache/nginx A /var/cache/nginx/client_temp A /var/cache/nginx/fastcgi_temp A /var/cache/nginx/proxy_temp A /var/cache/nginx/scgi_temp A /var/cache/nginx/uwsgi_temp 当容器在运行时(没有挂载数据卷),在容器里面做的任何修改都会被记录在容器的存储层里面。Docker commit 命令,会在原有镜像的基础上,再叠加上容器的存储层,并构成一个 新的镜像 Docker Commit的语法格式: docker commit [选项] <容器ID或容器名> [<仓库名>[:<标签>]] 5、用docker commit构建一个新的镜像 docker@docker-ubuntu:~$ docker commit --author “luojun”\ --message "修改了默认网页"\ commmit_test nginx:v2 sha256:818ba2acb6828cae5f734164dec5606a9e36ff5ae8e5b44b1830dfab3a837e14 --author 是指定修改的作者, --message 则是记录本次修改的内容。 6、查看本地镜像: docker@docker-ubuntu:~$ docker images REPOSITORY TAG IMAGE ID CREATED SIZE nginx v2 818ba2acb682 About a minute ago 109MB nginx latest 958a7ae9e569 4 weeks ago 109MB
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 命令适用于一些特殊的应用场合,比如被入侵后保存现场等


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部