인프런 커뮤니티 질문&답변

꼬랑쥐님의 프로필 이미지

작성한 질문수

개발자를 위한 쉬운 도커

이미지 커밋(Commit)

CMD 부분에 질문이 있습니다.

24.02.18 16:26 작성

·

492

1

CMD ["nginx" "-g" "daemon off;"]
이 부분이 잘 이해가 안가서 찾아보니foreground로 실행되게 변경하는것, 초기 프로세스가 종료되지 않고 컨테이너가 계속 실행된다.로 나와있던데
이게 잘 와닿지가 않습니다.. 우선 저 명령어는 생성한 nginx 컨테이너에서 실행되는거라고 이해했는데
foreground로 실행된다는게 정확히 어떤 뜻인가요?
컨테이너도 도커가 켜져있고 안건드리면 계속 돌아가지 않나요?

답변 2

1

데브위키님의 프로필 이미지
데브위키
지식공유자

2024. 02. 18. 16:55

꼬랑쥐님 안녕하세요. 데브위키입니다.

foreground로 실행하는것은 nginx 프로그램을 프로세스로 실행한다는 말과 동일합니다!

먼저 PART2에서 말씀드렸던 컨테이너의 라이프사이클 부분에서 컨테이너는 생성(Created)단계와 실행(Running) 단계로 구분된다고 말씀 드렸었는데요!

docker create 이미지명 명령으로 컨테이너를 생성할 수 있었고,

docker start 컨테이너명 명령으로 컨테이너를 실행할 수 있었습니다.

그리고 docker run 명령은 create와 start를 한 번에 실행하는 명령입니다.

 

여기서 중요한 부분은 docker start 또는 docker run 명령으로 컨테이너를 실행하는 시점에서 메타데이터의 Cmd 필드에 있는 명령어를 통해 프로그램을 실행하는 것입니다!

 

정리하자면 nginx이미지의 CMD필드에 지정하는 nginx -g daemon off; 라는 명령은, nginx 이미지를 컨테이너로 실행하는 시점에서 컨테이너 내부의 nginx 소프트웨어를 실행하는 명령어로 이해해주시면 좋을 것 같습니다.

 

질문에 답변이 되셨는지요? 아직 이해가 잘 안되시는 부분이나 더 궁금하신 점이 있으시면 편하게 질문 부탁드립니다 😀

 

daehyun님의 프로필 이미지

2024. 06. 10. 00:54

c 옵션을 통해 변경한 CMD가 nginx의 기존 CMD랑 차이가 없어 보이는데 어떤 점에서 필요한 과정이었는지 궁금합니다.

0

인프런 AI 인턴님의 프로필 이미지

2024. 02. 18. 16:32

안녕하세요, 인프런 AI 인턴입니다.

꼬랑쥐님의 질문은 Docker에서 CMD 지시어를 이용하는 목적과 그것이 의미하는 바에 대한 것으로 이해됩니다. 특히 CMD ["nginx", "-g", "daemon off;"] 구문을 통해 Nginx 서버를 포그라운드에서 실행하는 것의 의미를 파악하는 데 어려움을 겪고 계신 것 같습니다.

Docker에서 Nginx 서버를 포그라운드에서 실행하게 하려면 Nginx 프로세스를 종료시키지 않고 계속 실행되게 만들어 주어야 합니다. 기본적으로 Nginx는 배경(daemon) 모드로 실행되도록 설정되어 있습니다. CMD ["nginx", "-g", "daemon off;"] 구문은 Nginx를 daemon(즉, 백그라운드)이 아닌 포그라운드 모드로 실행하라는 명령입니다. 이렇게 하는 이유는 Docker 컨테이너 내에서 실행되는 주 프로세스가 종료되었을 때, 컨테이너 그 자체가 종료되지 않도록 하기 위함입니다.

여러분이 질문하신 내용과 유사한 질문에 답변된 링크를 여기에 첨부하겠습니다. 또한, 해당 링크 내에서 ‘foreground(포그라운드)’ 가 도커 컨테이너 내에서 정확히 어떤 의미를 가지는지 더 자세히 알아볼 수 있습니다.

위의 질문에서는 “-c 옵션을 포함하지 않고 커밋하면 컨테이너가 정상적으로 실행되지 않고 곧바로 Exited되는 것”에 대한 문제가 제기되었고, “-c ‘CMD [“nginx”, “-g”, “daemon off;”]’ 옵션을 포함해야하는 이유”에 대하여 토론이 이루어졌습니다.

여기서 foregound 실행이라 함은 도커 컨테이너 내부에서 Nginx가 메인 프로세스로서 주목을 받음으로써, 해당 프로세스가 종료될 때까지 컨테이너를 계속 실행 상태로 유지하는 것을 말합니다. 다시 말해, 컨테이너는 포그라운드에서 실행되는 메인 프로세스가 종료된 후에야 함께 종료됩니다.

질문자님의 문제에 대해 좀 더 풍부한 답변을 얻고 싶으시면 주저하지 말고 추가로 질문해 주시길 바랍니다. 혹시 해당 답변이 충분하지 않다면, 강의 지식공유자에게 더 자세한 설명을 요청할 수 있습니다.

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.