답변:
docker stop은 컨테이너 내부에서 프로세스 실행을 올바른 방식으로 중지하려고 시도하는 반면, docker kill은 kill 신호를 전송합니까?
기본적으로 그렇습니다. 차이는 미묘하지만 커맨드 라인 참조에 요약되어 있습니다 .
따라서 stop
표준 POSIX 신호 를 전송하여 정상적인 종료를 트리거하는 SIGTERM
반면 kill
기본적으로 프로세스를 종료 하지만 다른 신호를 보낼 수도 있습니다.
SIGTERM 신호는 프로세스를 종료하여 종료를 요청합니다. SIGKILL 신호와 달리 프로세스에서 신호를 포착하고 해석하거나 무시할 수 있습니다. 이를 통해 프로세스는 자원을 해제하고 적절한 경우 상태를 저장하는 훌륭한 종료를 수행 할 수 있습니다. SIGINT는 SIGTERM과 거의 동일합니다.
어쨌든 프로세스는 적용되지 않지만 일반적으로 프로세스는 SIGTERM
정상적으로 처리 하고 자신의 책임에 따라 올바른 작업을 수행해야합니다. 이는 유예 기간보다 오래 걸리는 정상 종료 시도로 인해 쉽게 실패 할 수 있습니다. 데이터 무결성이 가장 중요한 것 (예 : 데이터베이스); 자세한 설명 은 예를 들어 헤이든 소령의 SIGTERM 대 SIGKILL 을 참조하십시오 .
응용 프로그램은 SIGTERM이 수신되면 원하는 작업을 결정할 수 있습니다. 대부분의 응용 프로그램은 리소스를 정리하고 중지하지만 일부 응용 프로그램은 그렇지 않을 수 있습니다. SIGTERM이 수신 될 때 애플리케이션이 완전히 다른 것을 수행하도록 구성 될 수 있습니다. 또한 응용 프로그램이 디스크 I / O 대기와 같은 잘못된 상태 인 경우 전송 된 신호에 대해 작동하지 않을 수 있습니다.
docker kill
종료하는 동안 시간을 절약하기 위해 수동으로 사용하는 이유를 이해 하지만 스크립트에서는 항상 종료를 통해 정상적으로 종료하는 것이 더 좋지 docker stop
않습니까? 그래도 여전히 docker kill
스크립트에서 많은 것을보고 있습니다.
docker kill
메인 진입 점 프로세스 / 프로그램을 갑자기 중지합니다
docker stop
우아하게 멈추려 고 노력할 것입니다.
두 경우 모두 파일 시스템 변경 사항이 유지되거나 (중지 또는 종료시) docker start <container>
계속되는 경우 계속됩니다.
docker kill
주 프로세스가 여전히 메모리에 가지고있는 보류중인 파일 시스템 변경의 경우 파일 시스템이 손상 될 수 있습니까?
docker kill
프로세스를 종료하는 것과 유사 합니다.
데스크탑 분리 및 컴퓨터 종료 와 유사 합니다.
플러그 오프를 당기는 것은 하드 전원 끄기를 docker kill
의미하는 것처럼 my_container를 죽이는 직접적인 방법을 의미하며, 프로세스를 먼저 정상적으로 종료하려고 시도하지 않습니다.
컴퓨터를 종료 docker stop
한다는 것은 모든 프로세스를 종료하기 위해 OS에 SIGTERM
신호를 보내는 것을 의미 합니다. 여기서 프로세스를 정상적으로 중지하기 위해 실행중인 컨테이너에 신호를 보냅니다 .