为什么使用 rm 从容器中删除文件后虚拟大小仍然相同?
Why the virtual size still the same after delete a file from container with rm?
我想了解更多关于 Docker 的信息。我是新手,对此和 linux 非常陌生。
我的英语并不完美,因此我复制了终端输出。
我有一个虚拟大小为 516MB 的图像。
我在容器中启动了 bash 并使用 wget 将一些 26MB 数据下载到其中。下载后,我通过提交从容器的更改创建一个图像。之后 VIRTUAL SIZE 为 542.5MB。那是对的。
提交后我再次开始 bash,并删除了这个文件。
当我提交更改时,图像 VIRTUAL SIZE 为 542.8MB。
这个尺寸没有减少,反而增加了。
能告诉我原因吗?
本地图片:
[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
列出活动的并根据容器的更改创建新图像:
[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
再次列出活动的并根据容器的更改创建新图像:
[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
提前感谢您提供的任何帮助。
埃德
Docker 对其图层使用 union file system。每个 运行 命令都会创建一个新层,来自 运行 容器的提交也是如此。图像由特定层及其所有祖先层组成。这是虚拟尺寸。因此,虚拟大小在层中单调增加。您的 wget 创建了一个新层。您的 rm 创建了一个新层,即使文件的合并(例如,du -hs /)的大小更小。
在评论中回答,因为太大而无法评论。
单个命令
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 的信息。我是新手,对此和 linux 非常陌生。 我的英语并不完美,因此我复制了终端输出。 我有一个虚拟大小为 516MB 的图像。 我在容器中启动了 bash 并使用 wget 将一些 26MB 数据下载到其中。下载后,我通过提交从容器的更改创建一个图像。之后 VIRTUAL SIZE 为 542.5MB。那是对的。 提交后我再次开始 bash,并删除了这个文件。 当我提交更改时,图像 VIRTUAL SIZE 为 542.8MB。
这个尺寸没有减少,反而增加了。 能告诉我原因吗?
本地图片:
[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
列出活动的并根据容器的更改创建新图像:
[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
再次列出活动的并根据容器的更改创建新图像:
[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
提前感谢您提供的任何帮助。
埃德
Docker 对其图层使用 union file system。每个 运行 命令都会创建一个新层,来自 运行 容器的提交也是如此。图像由特定层及其所有祖先层组成。这是虚拟尺寸。因此,虚拟大小在层中单调增加。您的 wget 创建了一个新层。您的 rm 创建了一个新层,即使文件的合并(例如,du -hs /)的大小更小。
在评论中回答,因为太大而无法评论。
单个命令
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