创建一个简单的Java应用程序作为docker image

时间:2017-10-14 15:46:31

标签: docker dockerfile docker-image

我正在学习码头工作,并参考在线课程。在一些舒适程度之后,我现在正在尝试制作一个dockerized java图像,一个简单的Java应用程序。

我试图在没有任何最小操作系统的情况下制作dockerized Java应用程序,因此在Dockerfile中使用FROM scratch。以下是内容:

FROM scratch
ADD FirstJavaApp.class .
RUN yum -y install java
CMD java FirstJavaApp

据我所知,任何应用程序的dockerized图像都应该满足所有依赖项(为此目的,我在Dockerfile中添加了yum -y install java。)

现在,当我使用此Dockerfile构建映像时,它给出了以下错误:

sudo docker build -t javaappusingscratch .
Sending build context to Docker daemon  377.8MB
Step 1/4 : FROM scratch
 --->
Step 2/4 : ADD FirstJavaApp.class .
 ---> Using cache
 ---> c624d7dc7c21
Step 3/4 : RUN yum -y install java
 ---> Running in 702829f38ad8
container_linux.go:265: starting container process caused "exec: \"/bin/sh\": stat /bin/sh: no such file or directory"
oci runtime error: container_linux.go:265: starting container process caused "exec: \"/bin/sh\": stat /bin/sh: no such file or directory"

但是,如果我将FROM scratch替换为FROM centos,它可以正常工作。据我所知,scratch没有任何最小的操作系统,我的目标是构建只包含应用程序及其依赖关系的图像,这就是docker图像的目标。

那么我有什么遗漏或不能理解的东西吗?任何人都可以帮我理解这个吗?

1 个答案:

答案 0 :(得分:1)

除非你有一个shell,否则你不能使用CMD,而你没有来自scratch的shell。通常,您会发现Java依赖于一堆不是scratch的东西。您可以找到比centos更精细的替代品(例如Alpine),但它不适用于scratch