httpd 이미지에 지정된 명령 "httpd-foreground"는 무엇입니까?

2990 단어 도커
apache(httpd 데몬)의 기동은 service 커멘드나 systemctl 커멘드로 기동하는 것이 많다고 생각합니다만 docker container ls 그래서 조사해 보았습니다.

대전제로서 컨테이너는 CMD 커멘드나 ENTRYPOINT 커멘드로 지정한 커멘드가 종료하면 컨테이너 자체도 종료하는 구조입니다(아래의 기사를 알기 쉬웠습니다)
참고 : htps // // r치테 c친g. 는 bぉ. jp/엔트리/2020/08/13/153842

결론 : httpd -DFOREGROUND 명령을 실행하여 httpd 데몬을 포그라운드에서 시작했습니다.



실제로 httpd 이미지의 리포지토리를 살펴 보겠습니다.

httpd 이미지의 dockerfile CMD 명령이 이와 같이 지정되었습니다.
~省略~
COPY httpd-foreground /usr/local/bin/

EXPOSE 80
CMD ["httpd-foreground"]

COPY 명령은 httpd-foreground를/usr/local/bin/에 복사합니다. CMD 명령에 지정된 httpd-foreground를 살펴봅니다.
#!/bin/sh
set -e

# Apache gets grumpy about PID files pre-existing
rm -f /usr/local/apache2/logs/httpd.pid

exec httpd -DFOREGROUND "$@"
httpd -DFOREGROUND가 실행 중입니다. 이것은 httpd 데몬을 포그라운드에서 시작하는 것을 의미합니다.

service 커멘드를 사용하면 백그라운드에서 실행한 후 service 커멘드 자체는 종료하기 때문에 컨테이너도 종료해 버립니다만, 이 방법이라면 httpd 데몬이 포그랜드로 기동되어 컨테이너가 종료하지 않습니다.

실제로 시도해보십시오.



httpd-foreground



우선 보통 apache 이미지를 시작해 보겠습니다.
docker run -dit -p 8080:80 httpd:2.4

컨테이너가 시작되었는지 확인해 봅니다.
docker conteiner ls

컨테이너를 시작하고 시간이 지나도 컨테이너는 시작된 상태로 유지됩니다.

서비스 httpd start



그런 다음 이전의 docker run 명령에 service httpd start 명령을 인수로 전달합니다.
docker run -dit -p 8080:80 httpd:2.4 service httpd start

컨테이너를 살펴 보겠습니다.



COMMAND의 란이 service httpd start 로 되어 있어 status가 곧바로 Exited가 되었습니다. service 명령이 종료되면 거의 동시에 컨테이너가 중지되었습니다. 


-DFOREGROUND 옵션 없이 httpd 명령만으로 컨테이너를 시작해 봅니다.
docker run -dit -p 8080:80 httpd:2.4 httpd



여기도 즉시 컨테이너가 종료되었습니다.

뭔가 실수 등이 있었던 사양없이 지적하십시오.

좋은 웹페이지 즐겨찾기