Docker映像-类型。苗条vs苗条伸展vs伸展vs高山

时间:2019-03-02 00:50:43

标签: docker dockerfile

我正在寻找一个docker映像来构建一个Java应用程序,并查看可用的OpenJDK映像的变体。 我在这里https://github.com/docker-library/openjdk/tree/master/8/jdk看,看到高山,苗条的窗户。 这些之间有什么区别,每个变体都有什么?

2 个答案:

答案 0 :(得分:15)

每个Docker库文档(下面的引用和链接),下面是一个摘要:

  • openjdk:<version>

事实上的图像。如果不确定,请使用它。

  • openjdk:<version>-stretchopenjdk:<version>-jessie

jessiestretchDebian发行版的套件代码名称,并指示图像所基于的发行版

  • openjdk:<version>-alpine

类似地,该图像基于Alpine Linux,因此是非常小的基础图像。如果您需要图像尺寸尽可能小,建议您这样做。需要注意的是,它使用了一些不寻常的库,但是对于大多数软件来说应该不是问题。如有疑问,请查看下面的官方文档。

  • openjdk:<version>-slim

此图像仅包含运行Java所需的最少软件包(例如,缺少许多与UI相关的Java库)。除非您在仅部署{em> openjdk映像且有空间限制的环境中工作,否则建议在此映像上使用默认映像。

  • openjdk:<version>-windowsservercore

此图片基于Windows Server Core (microsoft/windowsservercore)



完整文档(version shown below herelatest version here):

  

图片变体

     

openjdk图像有多种口味,每种口味都是为了   特定的用例。

     

openjdk:<version>

     

这是实际图像。如果不确定您的需求   是的,您可能要使用这个。设计用于   作为扔掉的容器(装入源代码并启动   容器来启动您的应用),以及构建其他应用的基础   图片。

     

其中一些标签的名称可能像jessie或stretch。   这些是发布的套件代码名称   Debian并指出   释放图像基于。

     

openjdk:<version>-alpine

     

此图片基于Alpine Linux project中流行的the alpine official image。 Alpine Linux小得多   比大多数分发基础映像(约5MB)要多,因此导致   图像通常更苗条。

     

当最终图像尺寸为   希望尽可能小。需要注意的主要警告是   使用musl libc而不是glibc and friends,所以一定要   根据libc的深度,软件可能会出现问题   要求。但是,大多数软件对此没有问题,   因此,此变体通常是非常安全的选择。有关详情,请参见this Hacker News comment thread   有关可能出现的问题的更多讨论以及一些优点/缺点   基于高山的图像的比较。

     

为最小化图像大小,其他相关工具并不常见   (例如gitbash)包含在基于Alpine的图像中。使用   以该映像为基础,在自己的Dockerfile中添加所需的东西   (有关如何操作的示例,请参见alpine image description   如果不熟悉,请安装软件包。)

     

openjdk:<version>-windowsservercore

     

此图像基于Windows Server Core (microsoft/windowsservercore)。   因此,它仅在该图像起作用的地方起作用,例如   Windows 10专业版/企业版(周年纪念版)或Windows   Server 2016。

     

有关如何在Windows上运行Docker的信息,请参阅   Microsoft提供的相关“快速入门”指南:

           

openjdk:<version>-slim

     

此图像将安装OpenJDK的-headless软件包,因此   缺少许多与UI相关的Java库和一些常见的软件包   包含在默认标记中。它仅包含最小的软件包   需要运行Java。除非您在以下环境中工作    openjdk映像将被部署,并且您有空间限制,我们强烈建议使用此映像的默认映像   存储库。

答案 1 :(得分:1)

选择适合您需求的基础docker镜像,请记住镜像大小也是重要方面

图像可以被视为有关如何创建容器的一组说明。在Docker中,一个映像可以继承(或基于)另一个映像,在基本映像的基础上添加其他指令。每个图像都由多层组成,这些层实际上是不可变的。

请阅读Crafting the perfect Java Docker build flow文章。

Docker映像大小实际上非常重要。大小有影响 上:

  • 网络延迟:需要通过网络传输Docker映像
  • 存储:需要将所有这些位存储在某个地方
  • 服务可用性和弹性:使用Docker调度程序时,例如Kubernetes,Swarm,Nomad,DC / OS或其他(调度程序可以 在主机之间移动容器)
  • 安全性:您真的是真的需要Java应用程序具有其所有CVE漏洞的libpng软件包吗?
  • 开发敏捷性:小型Docker映像==更快的构建时间和更快的部署


要运行Java应用程序,您至少需要JRE。例如,对于春季项目,您的图像可以基于slim Alpine Linux with OpenJDK JRE

#simple dockerFile for java app:

#here we are using Base Alpine Linux based image with OpenJDK JRE only
#For Java 8, try this
FROM openjdk:8-jre-alpine

#For Java 11, try this
#FROM adoptopenjdk/openjdk11:alpine-jre

#copy application WAR/JAR (with libraries inside)
COPY target/spring-boot-*.war/jar yourName.war/jar
# specify default command
CMD ["/usr/bin/java", "-jar", "/yourName.war/jar"]

您还可以使用docker history yourImageName来查看构成图像的所有图层(及其大小)。