Entrypoint에서 exec 사용하는 이유
Brunch Story
Docker 실행 시, Entrypoint에서 exec 명령어를 사용하는 이유
오픈소스의 Dockerfile을 보면, 종종 Entrypoint로 쉘 스크립트를 지정하는 경우들을 볼 수 있습니다. 그 때마다 쉘 스크립트에 있던 exec 명령어를 봤는데, 그 역할에 대해서 이번에 처음 알게 되었습니다.
1. Docker는 컨테이너를 종료할 때, 1번 프로세스에 SIGTERM을 보내고, 만약 타임아웃이 발생하면 SIGKILL을 통해 강제 종료합니다. SIGKILL로 종료되면 137번 코드와 함께 Exit합니다.
2. Entrypoint로 쉘 스크립트를 지정하면, 쉘 스크립트가 컨테이너의 1번 프로세스가 됩니다. 즉, 시그널을 받는 첫 프로세스가 바로 쉘 스크립트가 된다는 의미입니다.
3. 쉘 스크립트는 백그라운드로 실행 시에, 자식 프로세스에 정상적으로 시그널을 전달하지 않습니다. 따라서 Docker가 컨테이너를 종료하기 위해 SIGTERM을 보내면, 쉘 스크립트만 종료되고, 자식 프로세스들은 정상적으로 종료되지 않을 수 있습니다. 그 상태에서 타임아웃이 발생하면, 결국 SIGKILL로 종료됩니다.
4. exec 명령어는 주로 유닉스 계열에서 사용하는 명령어인데, 해당 명령어는 현재 쉘 프로세스를 대체해줍니다. 즉, exec를 통해 특정 명령어를 수행하면 해당 명령어가 실행되고, 기존 쉘 스크립트는 종료됩니다.
5. Entrypoint로 지정한 쉘 스크립트에서 마지막에 프로그램 수행 시, exec 명령어를 수행하면, 해당 프로그램을 1번 프로세스로 만들 수 있습니다. 그러면 시그널도 프로그램이 직접 받을 수 있어서 Graceful Termination 과정을 커스텀하게 구현할 수 있습니다.
https://brunch.co.kr/@growthminder/142
다음 내용이 궁금하다면?
이미 회원이신가요?
2024년 6월 2일 오후 1:06
직장인으로서 10년 정도 일하게 되면 피할 수 없는 순간이 바로 조직에서 리더의 역할을 받게 되는 인사발령이다. 팀원이었을 때는 내게 주어진 업무를 내가 가진 능력과 주변 동료들의 도움으로 해결하고, 그에 합당한 평가와 보상을 기다리며, 나쁘지 않는 리워드와 내 위치에 안도하며 또 새해를 맞이하고 하루하루를 버텨나가는 과정에 큰 어려움이 없다.
... 더 보기AI(LLM) 애플리케이션의 발전 속도가 AI 지능(능력)의 발전 속도를 따라가지 못하고 있는 상태가 되었다. 즉, 이제 AI가 부족한 것이 문제가 아니라, AI의 능력을 100% 활용하지 못하고 있는 것이 문제인 상태가 되었다는 이야기.
2000년 초반부터 온톨로지 연구를 해왔고, 관심을 갖고 있는 사람으로서 GraphRAG 에 대해 갖고 있는 생각을 적어봤습니다.
... 더 보기ChatGPT 사용할 때 어떤 모델을 선택해야할지 망설여집니다. 모델명만 봐서는 어떤게 좋은지 모르겠더라고요.
... 더 보기