이 scratch
이미지를 기반으로 하는 Docker 컨테이너에는 셸이 없습니다.
그러면 내가 넣은 바이너리는 어떻게 실행되나요?
답변1
쉘은 쉘 스크립트를 실행하거나 대화형 쉘 세션을 제공하는 데에만 필요합니다. 바이너리를 실행하는 컨테이너에는 이러한 항목이 필요하지 않습니다. 지정된 바이너리를 실행합니다.진입 지점( 형식으로 지정된 경우 exec
) 셸을 사용하지 않습니다.
컨테이너 설정에는 셸이 필요하지 않습니다. 셸에는 특별한 것이 없으며 다른 것과 마찬가지로 바이너리입니다. 컨테이너 런타임은 바이너리가 실행되는 컨테이너에 대한 "컨텍스트"를 설정합니다.
셸 없이 컨테이너를 빌드하고 실행할 수 있으려면 실행 명령(ENTRYPOINT
위에 언급했듯이,RUN
등) 모두 exec
테이블을 사용합니다.즉
ENTRYPOINT ["executable", "arg1", "arg2"]
쉘 형태 대신
ENTRYPOINT executable arg1 arg2
후자는 셸에 의존하며 /bin/sh
(또는 셸이 구성된 경우 SHELL
) 사용할 수 없는 경우 실패합니다.
쉘이 필요하지 않다는 것 외에도 이 exec
형식에는 많은 장점이 있습니다. 특히 신호 처리를 단순화하고 많은 쉘 구문 분석 함정을 피합니다.