Docker创建了巨大的图像大小

时间:2014-12-22 14:51:24

标签: java docker

我提取了基础ubuntu:最新映像(大小为192.7 MB)并且只安装了Oracle java7(JDK)(tar.gz~53MB的大小)并提交了生成的映像。图像大小为903MB。

为什么图像尺寸会大幅增加?我们仍然需要添加其他组件(tom cat,vertx,mysql等)。图像尺寸将变得无法管理。

有关如何缩小图像尺寸的任何提示?

REPOSITORY          TAG                 IMAGE ID            CREATED             VIRTUAL SIZE
gammay/baseimage    v0.1a               80324b762c5e        21 minutes ago      903.6 MB
ubuntu              latest              9bd07e480c5b        2 weeks ago         192.7 MB

4 个答案:

答案 0 :(得分:14)

几点:

  • This Dockerfile将构建一个非常小的Oracle JDK映像。另请阅读accompanying blog post
  • 您可能不需要JDK来运行容器,并且可以使用基于JRE的容器。您始终可以使用单独的编译器容器来创建jar以进入应用程序容器。
  • 如果可以,请考虑使用基于OpenJDK构建的官方Java映像,这些映像相当小。
  • 理想情况下,您应该将MySQL等单独的进程放入单独的容器中。

答案 1 :(得分:1)

Java7可能需要安装大量依赖项才能运行它们,而这些依赖项并未安装在基础Ubuntu映像上。安装java时也会安装所有这些,这可能解释了大图像的大小。

答案 2 :(得分:1)

  

有关如何缩小图像尺寸的提示?

您可以尝试执行以下操作:

  • 您是否从源代码构建java?如果是这样,您是否可以禁用应用程序不需要的选项?是否有运行时不需要的开发包?你也许可以摆脱它们。

  • 在自己的容器中运行mysql,并将您的Web应用程序容器连接到您的mysql容器,可能通过container links。这样做有几个原因,其中一个原因是为了更轻松地扩展应用程序组件。

  • 以一种tomcat容器和应用程序jar的方式构建tomcat实例。然后,您可以使用data volume将应用程序挂载到tomcat容器。与tomcat / java容器相比,您的应用程序映像应该相对较小。更新应用程序变得更容易,因为您不需要同时重建tomcat / java映像(除非您需要额外的功能来烘焙到tomcat。

答案 3 :(得分:1)

您可以优化图片

http://www.centurylinklabs.com/optimizing-docker-images/

,你的形象可能会减轻一些重量

https://github.com/jwilder/docker-squash

您还可以使用本文中的工具

创建一个小图像

http://blog.xebia.com/2015/06/30/how-to-create-the-smallest-possible-docker-container-of-any-image/以及

提供的工具strip-docker-image

https://github.com/mvanholsteijn/strip-docker-image