首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Docker会作为高级压缩机来辅助吗?

Docker会作为高级压缩机来辅助吗?
EN

Stack Overflow用户
提问于 2019-01-03 19:05:36
回答 2查看 83关注 0票数 0

我在ubuntu机器上有一个和2+GB差不多大小的包。我已经从docker文件创建了一个docker镜像,大小约为86MB。现在,我已经通过使用copy命令更新docker文件创建了另一个镜像,该命令是在构建新的docker镜像时将ubuntu机器中的包复制到docker镜像。

现在,我看到docker镜像的大小约为2 2GB,因为docker镜像也包含包。我想知道这种docker现象是否能帮助我们在制作docker图像后减小包装的大小。

我想以这样的方式创建docker镜像,它还应该包含大约2 2GB的包,但我不希望docker镜像大小应超过200MB。

向您致敬,Karthik

EN

回答 2

Stack Overflow用户

发布于 2019-01-03 19:14:37

Docker不会为您压缩镜像的数据。希望在任意安装的软件包上压缩10倍是相当乐观的,无论是Docker还是其他。

虽然Docker使用了一些聪明和复杂的内核机制,但在大多数情况下,容器中的文件以一种奇怪的文件系统布局映射到磁盘上的普通文件。如果您正在尝试将一个2 GB的包安装到映像中,则需要2 GB的本地磁盘空间。有一些共享数据的机制可以帮助减少总体磁盘使用量(如果您基于该映像运行10个容器,它们将共享2 GB的基础映像,并且不使用额外的磁盘空间),但没有内置压缩。

另一个注意事项:一旦您在Dockerfile中采取操作以某种形式使用空间,它就会被永久使用。Dockerfile中的每一行都会创建一个新的“层”或单独的图像,用于记录与上一层相比的更改。如果您尝试安装的包不在某种类型的存储库中,除非您可以对其使用多阶段构建,否则您将无法在映像中使用它的空间利用率:

代码语言:javascript
运行
复制
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.
票数 3
EN

Stack Overflow用户

发布于 2019-01-03 19:34:04

正如David提到的,使用docker是不可能的,它使用了overlay或类似的分层FS表示。

但是有一个解决办法可以保持图像的小尺寸(但容器的大小会很大!!),但它会增加应用程序从docker容器启动的时间,也可能会给传递给应用程序的参数增加一些复杂性。一种可能的减小尺寸的方法:

  • 在添加之前压缩包
  • 在构建镜像时复制压缩包
  • 使用一些脚本作为入口点/CMD无论您使用什么来启动容器,它应该执行
    • 解压缩您需要在容器中安装解压包并启动应用程序<

    >H19(您可以在传递给应用程序时重复使用接收到的参数作为$@运行-甚至验证参数docker

通过使用gzip / 7zip / bzip2或任何您选择的压缩器压缩您的包文件进行检查-所有这些都可以看到输出文件是减小的大小。

如果它不能被足够的压缩

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

https://stackoverflow.com/questions/54021077

复制
相关文章

相似问题

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