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

    함께 읽은 게시물

    커리어를 쌓아야 할 때 알아야 하는 잔인한 사실들

    1

    ... 더 보기

     • 

    저장 39 • 조회 1,597


    (번역) Create React App 지원 종료

    C

    ... 더 보기

    (번역) Create React App 지원 종료

    www.harimkim.com

    (번역) Create React App 지원 종료

    코드 편집기를 만들어보신 적 있나요?

    ... 더 보기

    - YouTube

    youtu.be

     - YouTube

    [서평]일잘러의 비밀, 챗GPT와 GPTs로 나만의 AI 챗봇 만들기

    ... 더 보기

    사용자가 공유한 콘텐츠

    www.hanbit.co.kr

    사용자가 공유한 콘텐츠

    🗞️ 간밤에 구글이 Gemini 2.5 Pro를 출시했는데요. 벤치마크 상으로는 GPT-4.5와 Claude 3.7 의 성능을 크게 뛰어넘는 결과를 보여줍니다. 특히 코딩능력이 매우 크게 향상되었는데요.

    ... 더 보기

     • 

    저장 8 • 조회 2,880


    Crash 제대로 감지하고 다루기

    A

    ... 더 보기

    Crash 감지하고 다루기

    iOYES

    Crash 감지하고 다루기