2017-10-14 4 views
0

나는 도커를 배우며 온라인 과정을 참조했습니다. 안락한 수준을 유지 한 후, 이제는 간단한 Java 응용 프로그램 인 dockerized Java 이미지를 만들려고합니다.간단한 Java 응용 프로그램을 도커 이미지로 생성

최소한의 OS가 없어도 도킹 된 Java 응용 프로그램을 만들려고하므로 Dockerfile에 FROM scratch을 사용하고 있습니다. 아래는 내용이다 : 내가 만난 모든 종속성을해야 모든 응용 프로그램의 dockerized 이미지를 알고있는 것처럼

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

(이 목적으로, 나는 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 scratchFROM centos로 내가 대체합니다. scratch에는 최소한의 OS가 없기 때문에 내 응용 프로그램과 그 의존성을 가진 이미지를 만드는 것이 목표이며, 이것이 도커 이미지의 목적입니다.

내가 누락되었거나 잘 이해하지 못하는 것이 있습니까? 아무도 내가 이것을 이해하도록 도울 수 있습니까?

답변

1

셸이없고 scratch의 셸이없는 경우 CMD을 사용할 수 없습니다. 일반적으로 Java는 scratch이 아닌 것들의 힙에 의존한다는 것을 알 수 있습니다. centos (예 : Alpine)보다 희박한 대안을 찾을 수 있지만 scratch에서는 작동하지 않습니다.

+0

그러나 yum -y install java를 로그에서 실행하는 중에 오류가 발생하므로 스크래치가 정확히 무엇을 제공하는지 이해할 수 없습니까? 답장을 조금 더 넓혀 주시겠습니까? – CuriousMind

+0

Cmd가 셸을 시작합니다. 셸이 없습니다. 넌 얌이 없어. – bmargulies

+0

답변 해 주셔서 감사합니다. 그러나 내가 가지고있는 한 가지 의심, 호스트 OS는 이러한 누락 된 것들을 제공하지 않습니까? 컨테이너에 서비스를 제공하고 호스트 커널에서 컨테이너로 서비스를 제공하는이 도커의 개념이 아닌가요? 나는 완전히 틀릴 수도 있지만, 여기서이 생각을 나누는 것을 느꼈습니다. 시간이 허락한다면 응답하십시오. – CuriousMind