Docker 스크랩 컨테이너가 셸 없이 내 애플리케이션을 어떻게 실행할 수 있나요?

Docker 스크랩 컨테이너가 셸 없이 내 애플리케이션을 어떻게 실행할 수 있나요?

scratch이미지를 기반으로 하는 Docker 컨테이너에는 셸이 없습니다.

그러면 내가 넣은 바이너리는 어떻게 실행되나요?

답변1

쉘은 쉘 스크립트를 실행하거나 대화형 쉘 세션을 제공하는 데에만 필요합니다. 바이너리를 실행하는 컨테이너에는 이러한 항목이 필요하지 않습니다. 지정된 바이너리를 실행합니다.진입 지점( 형식으로 지정된 경우 exec) 셸을 사용하지 않습니다.

컨테이너 설정에는 셸이 필요하지 않습니다. 셸에는 특별한 것이 없으며 다른 것과 마찬가지로 바이너리입니다. 컨테이너 런타임은 바이너리가 실행되는 컨테이너에 대한 "컨텍스트"를 설정합니다.

셸 없이 컨테이너를 빌드하고 실행할 수 있으려면 실행 명령(ENTRYPOINT위에 언급했듯이,RUN등) 모두 exec테이블을 사용합니다.

ENTRYPOINT ["executable", "arg1", "arg2"]

쉘 형태 대신

ENTRYPOINT executable arg1 arg2

후자는 셸에 의존하며 /bin/sh(또는 셸이 구성된 경우 SHELL) 사용할 수 없는 경우 실패합니다.

쉘이 필요하지 않다는 것 외에도 이 exec형식에는 많은 장점이 있습니다. 특히 신호 처리를 단순화하고 많은 쉘 구문 분석 함정을 피합니다.

관련 정보