我有下面的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时,该映像是否始终包括在主机操作系统(Windows Server或Linux)上运行的Linux之类的操作系统?
我问这个问题的意义是Docker镜像是包含其他盒子(其中一个是openjdk)的物理盒子,这个盒子是否也包含Linux操作系统盒子,我可以从其中拉出(假设这是可能的),并将其作为Linux操作系统安装在空机器上?
发布于 2020-09-01 20:04:24
这取决于你所说的“操作系统”。它将始终包含来自分发映像的内容,它是在此基础上构建的。
例如,基于debian的图像将包括apt和其他debian特定的工具。但在“完整”的机器上(如在非容器中),您需要的大部分内容将被删除,以使图像尽可能小。
它将不包含内核,因为它在主机上运行,并由主机的内核控制。
发布于 2020-09-01 20:02:40
它不包括整个操作系统,但镜像将依赖于linux或windows,您不能在一个Dockerfile中构建同时在这两个平台上运行的镜像。依赖的原因是docker容器以一种小心隔离的方式与它的主机共享资源,这种机制在windows和linux上是不同的(尽管对于docker用户来说,差异是不可见的)。
发布于 2020-09-01 20:15:25
来自Docker Hub的“官方”OpenJDK镜像是基于许多不同的Linux发行版的变体。有一个精简版的Debian,一个阿尔卑斯山,等等。每种方法都有其优点和缺点。
映像需要包含足够的操作系统依赖项才能允许JVM运行。它还可能包括基本的诊断和管理工具--无论如何,足以在容器中执行基本的故障排除。您可以期望所有图像都至少包含基本的控制台shell工具,如"cp“和"cat",尽管它们在实现上有所不同。例如,Alpine变体从BusyBox获得这些实用程序,而不是从传统的GNU/Linux安装。
创建一个完全不包含平台依赖的Docker映像是可能的,但是没有什么动机去做到这一点--您只需要在应用程序本身中构建更多的东西。
https://stackoverflow.com/questions/63687208
复制相似问题