docker - Docker会协助作为高级压缩器吗?

标签 docker dockerfile

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

现在,我看到docker镜像大小约为2GB,因为docker镜像也包含该软件包。我想知道这种docker现象是否有助于我们在制作为docker镜像后减小软件包的大小。

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

问候,
卡尔提克

最佳答案

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.

关于docker - Docker会协助作为高级压缩器吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54021077/

相关文章:

node.js - 无法基于 Node :8. 1 镜像为 Node 应用程序构建 Docker 容器

amazon-web-services - docker 容器中的“aws configure”将不使用环境变量或配置文件

docker - 在Wildfly docker中部署的WAR以IP 0.0.0.0打开webapp

node.js - Console.log 在 dockerized Node.js/Express 应用程序中不工作

reactjs - 容器在ECS中通过react app退出

当 ENTRYPOINT 是 shell 脚本时,Docker CMD 很奇怪

python-3.x - 将外部文件挂载到Docker容器中

bind - dante-sever 无法通过 docker 容器中的接口(interface)名称绑定(bind) ip

reactjs - 如何从 nginx 发送请求并将容器 react 到 Spring Boot 容器?

node.js - 构建 Dockerfile - 在中间容器之间保留文件