소소한 궁금증: daemon

NayounNayoun
2 min read

실습을 하던 중 궁금증이 생겼습니다

근데 daemon이랑 foreground가 같이 한 문장에 있을 수가 있나 신기한데

맞아요, -d(데몬 모드)와 FOREGROUND(포어그라운드 모드)가 한 문장에 같이 있는 것이 언뜻 보면 모순처럼 보일 수 있습니다. 하지만 이 조합이 어떻게 동작하는지에 대한 이해는 중요합니다.

데몬 모드(d) vs 포어그라운드 모드(FOREGROUND)

  • d (데몬 모드):

    • 이 옵션은 컨테이너를 백 그라운드에서 실행하겠다는 뜻입니다. 즉, 컨테이너를 시작한 후에는 터미널을 점유하지 않고, 컨테이너가 백 그라운드에서 실행됩니다.
  • FOREGROUND:

    • Apache HTTP 서버(httpd)에서 D FOREGROUND 옵션을 사용하면, HTTP 서버가 포어 그라운드에서 실행됩니다. 즉, 서버가 백 그라운드에서 실행되지 않고, 지속적으로 실행 상태를 유지합니다.

    • 일반적으로 httpd는 백 그라운드에서 실행되도록 설정되어 있지만, 컨테이너 환경에서는 서버가 포어 그라운드에서 실행되어야 컨테이너가 계속 동작하게 됩니다.

dFOREGROUND를 함께 사용하나?

이것은 Docker 컨테이너 환경의 특성 때문입니다. Docker 컨테이너는 메인 프로세스가 종료되면 컨테이너 자체도 자동으로 종료됩니다. 따라서 컨테이너가 지속적으로 실행되기 위해서는 포어 그라운드에서 실행되는 프로세스가 필요합니다.

Apache 서버가 기본 설정대로 백 그라운드에서 실행되면, Docker 컨테이너 입장에서는 주 프로세스가 종료된 것으로 간주하고, 컨테이너를 종료하게 됩니다. 그래서 -D FOREGROUND 옵션을 사용하여 Apache 서버를 포어 그라운드에서 실행하도록 만들어, Docker 컨테이너가 지속적으로 실행되게 만드는 것입니다.

결론:

  • *d*는 컨테이너 자체를 백그라운드에서 실행하게 하고,

  • *D FOREGROUND*는 컨테이너 내부에서 실행되는 Apache 서버를 포어그라운드에서 실행시킴으로써, 컨테이너가 종료되지 않고 계속 실행되도록 합니다.

이런 방식은 컨테이너 환경에서 웹 서버, 데이터베이스 등 계속 실행되어야 하는 프로세스를 유지하는 데 자주 사용됩니다.

\=> 컨테이너는 systemctl이 불가한데,(=> root system이 안켜져 있어서) 그래서 저렇게 하는 방식 씀

  1. 아 컨테이너는 백그라운드(-d)에서 실행하고 HTTP 서버는 FOREGROUND에서 실행되도록 하는 거예요? 각각 따로임?
  • 정확합니다! 컨테이너는 d 옵션을 사용하여 백그라운드에서 실행되고, httpd 서버는 **D FOREGROUND*를 사용하여 포어그라운드에서 실행됩니다. 두 설정은 서로 독립적이지만 함께 사용되어 컨테이너가 종료되지 않도록 합니다.

    1. 아 그 저희가 뭐 리눅스 쓰면 -a, -y 이런 식으로 옵션 쓰듯이 -D도 옵션 지정하는 것 같아요. -D에 대한 내용이 FOREGROUND인 거고요.
  • 맞습니다! Dhttpd 명령어의 옵션으로, FOREGROUND는 그 옵션에 대한 인자(argument)입니다. 즉, Dhttpd의 실행 방식을 정의하는 옵션으로 볼 수 있습니다.

0
Subscribe to my newsletter

Read articles from Nayoun directly inside your inbox. Subscribe to the newsletter, and don't miss out.

Written by

Nayoun
Nayoun

Celina