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

Entrypoint에서 exec 사용하는 이유

Brunch Story

Entrypoint에서 exec 사용하는 이유

다음 내용이 궁금하다면?

또는

이미 회원이신가요?

2024년 6월 2일 오후 1:06

댓글 0

    함께 읽은 게시물

    직장인으로서 10년 정도 일하게 되면 피할 수 없는 순간이 바로 조직에서 리더의 역할을 받게 되는 인사발령이다. 팀원이었을 때는 내게 주어진 업무를 내가 가진 능력과 주변 동료들의 도움으로 해결하고, 그에 합당한 평가와 보상을 기다리며, 나쁘지 않는 리워드와 내 위치에 안도하며 또 새해를 맞이하고 하루하루를 버텨나가는 과정에 큰 어려움이 없다.

    ... 더 보기

     • 

    저장 3 • 조회 737


    AI(LLM) 애플리케이션의 발전 속도가 AI 지능(능력)의 발전 속도를 따라가지 못하고 있는 상태가 되었다. 즉, 이제 AI가 부족한 것이 문제가 아니라, AI의 능력을 100% 활용하지 못하고 있는 것이 문제인 상태가 되었다는 이야기.



    개발자의 코드리뷰는 상명하복이 아니다.

    면접관으로 들어가면 꼭 하는 질문들이 여러 개가 있다.

    ... 더 보기

    조회 226


    GraphRAG 에 대한 생각

    2000년 초반부터 온톨로지 연구를 해왔고, 관심을 갖고 있는 사람으로서 GraphRAG 에 대해 갖고 있는 생각을 적어봤습니다.

    ... 더 보기

    ChatGPT 버전명 설명

    ChatGPT 사용할 때 어떤 모델을 선택해야할지 망설여집니다. 모델명만 봐서는 어떤게 좋은지 모르겠더라고요.

    ... 더 보기