Docker映像是否包含OS?

时间:2020-09-01 11:57:52

标签: docker

我在Dockerfile下方”

FROM openjdk:12.0.2

EXPOSE 8080

ADD ./build/libs/*.jar app.jar

ENTRYPOINT ["java","-jar","/app.jar"]

生成的Docker映像封装了Java程序。当我将此Docker映像部署到Windows Server或Linux时,该映像是否始终包括运行在主机OS(Windows Server或Linux)之上的Linux之类的OS?

我问这个问题的意义是Docker映像是包含其他框的物理框(一个是openjdk),该框是否还包含我可以拉出的Linux OS框(假设是否可行)并且在空机上将其作为Linux OS安装吗?

3 个答案:

答案 0 :(得分:2)

这取决于您所说的“操作系统”。它始终包含发行映像中的内容,它是建立在上面的。
例如,基于debian的映像将包括apt和其他特定于debian的工具。但是,在“完整”机器上(例如在非容器中)所需的大多数东西都将被删除,以使图像尽可能小。

它将不包含内核,因为它在主机上运行并且由主机的内核控制。

答案 1 :(得分:1)

它不包含整个操作系统,但是该映像将依赖于linux或Windows,因此您无法在一个Dockerfile中构建可同时在两者上运行的映像。 产生这种依赖性的原因是,一个Docker容器以一种谨慎的隔离方式与其主机共享资源,这种机制在Windows和Linux上是不同的(尽管对您来说,作为Docker用户,这种区别是不可见的)。

答案 2 :(得分:1)

来自Docker Hub的“官方” OpenJDK映像基于多种不同的Linux发行版以变体形式提供。这里有一个缩减版的Debian,一个Alpine等。每种都有优点和缺点。

该映像将需要包含足够的操作系统依赖性,以允许JVM运行。它还可能包括基本的诊断和管理工具-无论如何,足以对容器进行基本的故障排除。您可以期望所有映像至少包含基本的控制台外壳工具,例如“ cp”和“ cat”,尽管它们的实现方式有所不同。例如,Alpine变体从BusyBox中获取这些实用程序,而不是从常规的GNU / Linux安装中获取。

可以创建一个完全不包含平台依赖项的Docker映像,但是几乎没有动机将其最小化-您只需要在应用程序本身中构建更多内容即可。