了解tomcat docker文件

我正在看下面的tomcat docker文件:

https://github.com/docker-library/tomcat/blob/5c8b74e495a1b63116b524407941b15eef58a7fe/8.0/jre8/Dockerfile

但是,它应该不指定一个操作系统作为基础的形象(例如Ubuntu,Debian等)?

我基本上只需要一个包含Ubuntu 16.x,Java 8和Tomcat 8的docker文件。但是不知道为什么我需要在上面的dockerfile中有很多行来完成。

Docker使用FROM指令来指示基础图像。 如果你沿着它走,你会看到

FROM debian:stretch 

https://github.com/docker-library/buildpack-deps/blob/master/stretch/curl/Dockerfile

图像包含需要在泊坞窗图像上编译的tomcat APR库。 库不需要tomcat运行,但build议在生产中使用它,因为它是快速和可扩展的连接器。

Dockerfile可以使用任何有效的Docker镜像来指定FROM 。 您经常会得到一个图像层次结构,一个是安装了基本操作系统,另一个是定制用于运行某些应用程序types(如Java应用程序,节点应用程序等)的操作系统的子级。

要计算出图像中的内容,需要跟踪FROM语句的层次结构以获取完整的图像。

从你链接的Dockerfile ,你可以看到FROM openjdk:8-jre 。 这告诉我们这个Dockerfile根据openjdk:8-jre图像的:latest标签构build一个图像。 因此,这意味着我们可以find该图像的Dockerfile ,并看到openjdk:8-jre实际上build立在buildpack-deps上:stretch-curl图像,它依次构build在debian:stretch图像上。

或者,您可以使用docker history对照图像,例如docker history openjdk:8-jre查看图像所组成的图层列表。

在Dockerfiles中看到这么多行的原因是图像build立在最小的基本图像上。 这在Docker中被认为是一个很好的做法,以保持图像的小。

Ubuntu的图像等等大小,通常不需要打包应用程序的最终结果。

在tomcat映像中,Dockerfilebuild立在openjdk:8-jre图像的基础之上,它本身是build立在基本的debian:stretch之上的。 因此,可能不像在Ubuntu中那样直接将Tomcat安装在Dockerfile中。