首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么在用rm从容器中删除文件后,虚拟大小仍然相同?

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

Stack Overflow用户
提问于 2015-04-01 00:14:37
回答 2查看 2.8K关注 0票数 7

我想知道更多关于码头的事情。我是如此的初学者,对这个和linux非常陌生。我的英语并不完美,所以我复制了终端输出。我有一个图像,虚拟大小为516 an。我在一个容器中启动bash,并使用wget下载一些26 to的数据。下载之后,我使用commit从容器的更改中创建一个映像。之后,虚拟大小为542.5MB。这是正确的。提交之后,我再次启动bash,并删除了这个文件。当我提交更改时,映像虚拟大小为542.8MB。

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

本地图像:

代码语言:javascript
复制
[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

使用最小的文件并下载文件:

代码语言:javascript
复制
[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

列出活动的对象,并根据容器的更改创建一个新的映像:

代码语言:javascript
复制
[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

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

代码语言:javascript
复制
[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

再次列出活动的图像,并根据容器的更改创建一个新的映像:

代码语言:javascript
复制
[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

谢谢您能提供的任何帮助。

边缘

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-04-01 12:04:13

回答评论,因为它太大,不能评论。

单一命令

代码语言:javascript
复制
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/*

较小的文件:

代码语言:javascript
复制
$ docker build -t test1 .
$ docker images | grep test1
test1 356 MB

单独的命令:

代码语言:javascript
复制
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/*

更大的形象:

代码语言:javascript
复制
$ docker build -t test2 .
$ docker images | grep test2
test2 510 MB
票数 8
EN

Stack Overflow用户

发布于 2015-04-01 01:39:19

Docker使用联合文件系统作为其层。每个RUN命令创建一个新层,就像从正在运行的容器中提交一样。图像由特定层及其所有祖先层组成。这是虚拟大小。因此,虚拟尺寸在各层中是单调增加的。您的wget创建了一个新层。您的rm创建了一个新层,尽管合并的文件(例如du -hs /)的大小较小。

票数 9
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29380738

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档