我在ubuntu机器上有一个和2+GB差不多大小的包。我已经从docker文件创建了一个docker镜像,大小约为86MB。现在,我已经通过使用copy命令更新docker文件创建了另一个镜像,该命令是在构建新的docker镜像时将ubuntu机器中的包复制到docker镜像。
现在,我看到docker镜像的大小约为2 2GB,因为docker镜像也包含包。我想知道这种docker现象是否能帮助我们在制作docker图像后减小包装的大小。
我想以这样的方式创建docker镜像,它还应该包含大约2 2GB的包,但我不希望docker镜像大小应超过200MB。
向您致敬,Karthik
发布于 2019-01-03 19:14:37
Docker不会为您压缩镜像的数据。希望在任意安装的软件包上压缩10倍是相当乐观的,无论是Docker还是其他。
虽然Docker使用了一些聪明和复杂的内核机制,但在大多数情况下,容器中的文件以一种奇怪的文件系统布局映射到磁盘上的普通文件。如果您正在尝试将一个2 GB的包安装到映像中,则需要2 GB的本地磁盘空间。有一些共享数据的机制可以帮助减少总体磁盘使用量(如果您基于该映像运行10个容器,它们将共享2 GB的基础映像,并且不使用额外的磁盘空间),但没有内置压缩。
另一个注意事项:一旦您在Dockerfile中采取操作以某种形式使用空间,它就会被永久使用。Dockerfile中的每一行都会创建一个新的“层”或单独的图像,用于记录与上一层相比的更改。如果您尝试安装的包不在某种类型的存储库中,除非您可以对其使用多阶段构建,否则您将无法在映像中使用它的空间利用率:
FROM ubuntu:18.04
COPY package.deb .
# At this point there is a layer containing the .deb file and
# it uses space in the final image.
RUN dpkg --install package.deb && rm package.deb
# The file isn't "in the image", but the image remembers adding it
# and then removing it, so it still uses space.
发布于 2019-01-03 19:34:04
正如David提到的,使用docker是不可能的,它使用了overlay或类似的分层FS表示。
但是有一个解决办法可以保持图像的小尺寸(但容器的大小会很大!!),但它会增加应用程序从docker容器启动的时间,也可能会给传递给应用程序的参数增加一些复杂性。一种可能的减小尺寸的方法:
>H19(您可以在传递给应用程序时重复使用接收到的参数作为$@运行-甚至验证参数docker
通过使用gzip / 7zip / bzip2或任何您选择的压缩器压缩您的包文件进行检查-所有这些都可以看到输出文件是减小的大小。
如果它不能被足够的压缩
https://stackoverflow.com/questions/54021077
复制相似问题