为什么在使用rm从容器中删除文件后虚拟大小仍然相同?

我想了解更多关于Docker的信息。 我是如此初学者,与这个和Linux非常新。 我的英文不完美,所以我复制了terminal输出。 我有一个516MB的虚拟大小的图像。 我在容器中启动了bash,并使用wget将一些26MB的数据下载到这个容器中。 下载后,我用提交从容器的变化创build一个图像。 之后,虚拟大小是542.5MB。 那是对的。 提交后,我又开始了bash,并删除了这个文件。 当我提交更改的图像虚拟大小是542.8MB。

这个大小并没有减less,反而增加了。 你能告诉我原因吗?

本地图片:

[fedora_user@fedora-vm ~]$ docker images REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE tester/mytestfedora latest c0ca83567bdd 4 seconds ago 516 MB fedora latest 834629358fe2 3 months ago 241.3 MB 

使用最小的和下载文件:

 [fedora_user@fedora-vm ~]$ docker run -i -t tester/mytestfedora /bin/bash bash-4.3# su dockeres [dockeres@05ef6e284e32 /]$ cd /home/dockeres/downloads/ [dockeres@05ef6e284e32 downloads]$ wget https://dl.dropboxusercontent.com/u/827503/0_TEMP/Riverbed.zip --2015-03-31 19:24:47-- https://dl.dropboxusercontent.com/u/827503/0_TEMP/Riverbed.zip Resolving dl.dropboxusercontent.com (dl.dropboxusercontent.com)... 54.243.97.104, 54.243.80.193, 50.16.185.28, ... Connecting to dl.dropboxusercontent.com (dl.dropboxusercontent.com)|54.243.97.104|:443... connected. HTTP request sent, awaiting response... 200 OK Length: 26177252 (25M) [application/zip] Saving to: 'Riverbed.zip' Riverbed.zip 100%[==============================================================>] 24.96M 3.66MB/s in 14s 2015-03-31 19:25:03 (1.78 MB/s) - 'Riverbed.zip' saved [26177252/26177252] [dockeres@05ef6e284e32 downloads]$ exit bash-4.3# exit 

列出活动的并从容器的更改中创build一个新的图像:

 [fedora_user@fedora-vm ~]$ docker ps -all CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 05ef6e284e32 tester/mytestfedora:latest "/bin/bash" 2 minutes ago Exited (0) 6 seconds ago sick_einstein [fedora_user@fedora-vm ~]$ docker commit 05ef6e284e32 tester/mytestfedora f122b12e94a32d477f2f2f18c5a5190a9ad5d349109933da65a0cfeff448c822 [fedora_user@fedora-vm ~]$ docker images REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE tester/mytestfedora latest f122b12e94a3 5 seconds ago 542.5 MB fedora latest 834629358fe2 3 months ago 241.3 MB 

再次访问并删除下载的文件:

 [fedora_user@fedora-vm ~]$ docker run -i -t tester/mytestfedora /bin/bash [dockeres@fb5ba36692f0 /]$ cd /home/dockeres/downloads/ [dockeres@fb5ba36692f0 downloads]$ rm -f Riverbed.zip [dockeres@fb5ba36692f0 downloads]$ ls [dockeres@fb5ba36692f0 downloads]$ exit bash-4.3# exit 

再次列出活动的,并从容器的更改中创build一个新的图像:

 [fedora_user@fedora-vm ~]$ docker ps -all CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES fb5ba36692f0 tester/mytestfedora:latest "/bin/bash" 51 seconds ago Exited (0) 5 seconds ago goofy_yalow [fedora_user@fedora-vm ~]$ docker commit fb5ba36692f0 tester/mytestfedora f744e248576d7fa434768a1e1d25625a9654020fe77e12306f304ff5d5ad3e3b [fedora_user@fedora-vm ~]$ docker images REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE tester/mytestfedora latest f744e248576d 3 seconds ago 542.8 MB fedora latest 834629358fe2 3 months ago 241.3 MB 

预先感谢您提供的任何帮助。

埃德

回答评论,因为它太大了评论。

单一命令

 FROM ubuntu RUN echo 'debconf debconf/frontend select Noninteractive' | debconf-set-selections \ && apt-get -qq update \ && apt-get -qq -y install wget unzip \ && mkdir /usr/etc \ && cd /usr/etc \ && wget -nv -O /tmp/jboss.zip http://download.jboss.org/jbossas/7.1/jboss-as-7.1.1.Final/jboss-as-7.1.1.Final.zip \ && unzip /tmp/jboss.zip \ && apt-get clean \ && rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/* 

较小的文件:

 $ docker build -t test1 . $ docker images | grep test1 test1 356 MB 

单独的命令:

 FROM ubuntu RUN echo 'debconf debconf/frontend select Noninteractive' | debconf-set-selections && apt-get -qq update && apt-get -qq -y install wget unzip RUN wget -nv -O /tmp/jboss.zip http://download.jboss.org/jbossas/7.1/jboss-as-7.1.1.Final/jboss-as-7.1.1.Final.zip RUN mkdir /usr/etc RUN cd /usr/etc && unzip /tmp/jboss.zip RUN apt-get clean RUN rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/* 

更大的形象:

 $ docker build -t test2 . $ docker images | grep test2 test2 510 MB 

Docker为它的图层使用了一个联合文件系统 。 每个RUN命令都会创build一个新层,与运行容器一样提交。 一个图像由一个特定的图层和所有的祖先图层组成。 这是虚拟的大小。 因此,虚拟大小在层中单调递增。 你的wget创build了一个新层。 你的rm创build了一个新层,即使文件联合(比如du -hs /)的大小更小。