一、问题
对容器内部进行修改以后,如果想对这些修改进行保存。不想在退出容器,一不小心删掉容器丢失这些更改。并且你还希望将这些修改作为其它容器的基础进行使用,那么这个时候就需要打包成image了
二、解决方案
通过docker commit命令提交你对容器做出的修改并创建一个新的镜像image。
我们可以通过交互式bash shell的方式启动容器。更新软件包,如下所示。
$ apt update$ apt install vim
当我们退出容器以后,容器会停止运行,但容器还在,知道你通过docker rm命令彻底删除容器。所以在删除之前可以对容器做得修改进行提交,并创建一个新的镜像ubuntu:update_vim。镜像的名称为ubuntu,同时增加了一个标签update以和原来的ubuntu:lastest 镜像加以区分。
$ docker commit a922eb37 ubuntu:update_vim$ docker imagesREPOSITORY TAG IMAGE ID CREATED SIZEubuntu update_vim 2719f7931237 6 seconds ago 168MB
现在就可以安全的删除已经停止的容器了,同时也可以基于刚刚建立的容器ubuntu:update_vim 镜像启动新的容器
三、讨论
我们可以通过docker diff 命令来查看在容器中对镜像做出的修改,如下所示。
$ docker diff a922eb3714d2A /usr/share/fileA /usr/share/file/magicA /usr/share/file/magic.mgcC /usr/share/lintianC /usr/share/lintian/overridesA /usr/share/lintian/overrides/libcanberra0A /usr/share/lintian/overrides/readline-commonA /usr/share/lintian/overrides/libpython3.8-stdlibA /usr/share/lintian/overrides/libpython3.8A /usr/share/lintian/overrides/libpython3.8-minimalA /usr/share/lintian/overrides/libvorbis0aA /usr/share/lintian/overrides/vimA /usr/share/lintian/overrides/vim-commonC /usr/bin
- A 表示文件或者文件夹是新增的
- C表示文件内容有修改
- D表示该项目已经删除
