我不明白为什么 ‘chown’ 命令应该增加我的docker映像的大小?
以下Dockerfile创建大小为5.3MB的映像:
FROM alpine:edge
RUN adduser example -D -h /example -s /bin/sh
但是,此示例创建的图像大小为8.7MB:
FROM alpine:edge
RUN adduser example -D -h /example -s /bin/sh && \
chown -R example.example /lib
为什么?
注意: 我的实际dockerfile当然比该示例长得多,因此映像大小的增加也很大。这就是为什么我什至在乎。
Dockerfile中的每个步骤都会生成一个新的中间映像或“层”,该文件由文件系统中与上一层不同的任何内容组成。泊坞窗映像由一组图层组成,这些图层相互叠加以创建最终的文件系统。
如果你有:
RUN adduser example -D -h /example -s /bin/sh
那么你可能改变不外乎几个文件等在/etc
(/etc/passwd
,/etc/group
,和他们的影子当量)。
如果你有:
RUN adduser example -D -h /example -s /bin/sh && \
chown -R example.example /lib
然后,已更改的事物列表将递归地包含中的所有内容/lib
,这可能更大。实际上,在我的alpine:edge
容器中,它的内容看起来/lib
是3.4MB:
/ # du -sh /lib
3.4M /lib
在您的示例中,哪个恰好说明了图像大小的变化。
更新
使用您实际的Dockerfile,并npm install ...
注释掉该行,无论是否运行adduser
and
chown
命令,最终映像大小都没有任何区别。鉴于:
RUN echo "http://nl.alpinelinux.org/alpine/edge/main" > /etc/apk/repositories && \
echo "http://nl.alpinelinux.org/alpine/edge/testing" >> /etc/apk/repositories && \
apk add -U wget iojs && \
apk upgrade && \
wget -q --no-check-certificate https://ghost.org/zip/ghost-0.6.0.zip -O /tmp/ghost.zip && \
unzip -q /tmp/ghost.zip -d /ghost && \
cd /ghost && \
# npm install --production && \
sed 's/127.0.0.1/0.0.0.0/' /ghost/config.example.js > /ghost/config.js && \
sed -i 's/"iojs": "~1.2.0"/"iojs": "~1.6.4"/' package.json && \
# adduser ghost -D -h /ghost -s /bin/sh && \
# chown -R ghost.ghost * && \
npm cache clean && \
rm -rf /var/cache/apk/* /tmp/*
我得到:
$ docker build -t sotest .
[...]
Successfully built 058d9f41988a
$ docker inspect -f '{{.VirtualSize}}' 058d9f41988a
31783340
鉴于:
RUN echo "http://nl.alpinelinux.org/alpine/edge/main" > /etc/apk/repositories && \
echo "http://nl.alpinelinux.org/alpine/edge/testing" >> /etc/apk/repositories && \
apk add -U wget iojs && \
apk upgrade && \
wget -q --no-check-certificate https://ghost.org/zip/ghost-0.6.0.zip -O /tmp/ghost.zip && \
unzip -q /tmp/ghost.zip -d /ghost && \
cd /ghost && \
# npm install --production && \
sed 's/127.0.0.1/0.0.0.0/' /ghost/config.example.js > /ghost/config.js && \
sed -i 's/"iojs": "~1.2.0"/"iojs": "~1.6.4"/' package.json && \
adduser ghost -D -h /ghost -s /bin/sh && \
chown -R ghost.ghost * && \
npm cache clean && \
rm -rf /var/cache/apk/* /tmp/*
我得到:
$ docker build -t sotest .
[...]
Successfully built 696b481c5790
$ docker inspect -f '{{.VirtualSize}}' 696b481c5790
31789262
即,两个图像的大小大致相同(相差约5 Kb)。
如果npm install
命令可以成功运行,我当然希望生成的图像更大(因为这将安装其他文件)。
问题内容: 我通过Fedora的Dockerfile创建了一个简单的映像(最初为320 MB)。 添加了Nano(这个1MB大小的微型编辑器),图像的大小已增加到530 MB。我在此基础上添加了Git(30-ish MB),然后将图像大小的火箭提高到830 MB。 那不是疯了吗? 我试图导出和导入容器以删除历史记录/中间图像。这项工作最多可节省25 MB,现在我的图像大小为804 MB。我也尝试过
问题内容: 我已经设置了泊坞窗,并且使用了完全不同的块设备来存储泊坞窗的系统数据: 请注意, 使用的是完全不同的硬盘 问题是,当我继续下载docker映像并运行docker容器时,似乎另一个硬盘驱动器 也用完了。 我可以通过删除一些Docker映像来验证此问题。在我删除了一些docker映像之后, 现在有了一些额外的空间。 我想念什么吗? 我的泊坞窗版本: 问题答案: 这是devicemapper
我从Fedora通过Dockerfile制作了一个简单的图像(最初为320 MB)。 添加了Nano(这个1MB大小的微小编辑器),图像的大小上升到了530MB。我在上面添加了Git(大约30 MB),然后我的图像大小的sky-rockets达到了830 MB。 这不是疯了吗? 我已经尝试导出和导入容器来删除历史/中间图像。这一努力节省了25 MB,现在我的图像大小是804 MB。我也尝试在一个上
问题内容: Docker和虚拟机的映像是否存在差异?除了图像格式,我在任何地方都找不到任何信息。请注释掉图像大小,实例创建时间,捕获时间等内容。谢谢! 问题答案: 这些是我可以列出的docker和VM映像之间的一些区别: 1. Docker中的快照过程比VM更快 我们通常从基本映像开始,然后进行更改,然后使用docker提交这些更改,然后创建一个映像。该图像仅包含与基准的差异。当我们要运行图像时,
我正在将一个rust应用程序打包到docker映像以部署到我的服务器。我发现rust docker的图像大小超过1GB(比使用java和python的任何其他应用程序都大)。为什么rust docker的形象如此巨大?我检查了该层,发现cargo build命令需要400MB以上的内存。 是否可以缩小rust docker的图像?