docker 컨테이너에서 CMD 명령어에 관한 질문입니다.
글쓴이: 힘들다 / 작성시간: 일, 2020/05/17 - 6:05오후
제가 centos7을 호스트로 사용할 때 어떤 서비스를 시작하거나 등록할때 systemctl 을 사용했었는데요..
docker 컨테이너안에서 systemctl 을 사용할 수도 있지만 별로 좋은 방법은 아니라 그래서
일반적으로 컨테이너실행 시킬때 CMD입력란에 만약 웹서버라면 apachectl -DBACKGROUND 이런식으로 명령을 주잖
아요... 근데 apachectl -DBACKGROUND 명령어가 익숙하지않고 ,, 어디서 공부해야될지도 모르겠고.. 앞으로
더 많은 서비스를 컨테이너화 할거같은데 저런 CMD 명령어를 어디서 공부할수 있나요. 혹은 어디서 알 수 있을
까요??
Forums:
...
뭐 저도 docker 전문가는 아닙니다만... 일반적으로 컨테이너를 실행할 때 서버를 백그라운드로 돌리지는 않을 텐데요?
컨테이너가 시작할 때 처음으로 실행시키는 프로세스가 그 컨테이너의 "주인" 역할을 하고, 그 프로세스가 종료되면 도커는 컨테이너 전체가 종료되었다고 간주하고 컨테이너를 종료시킵니다.
그런데 프로세스를 백그라운드로 돌린다는 건 일반적으로 프로세스가 child process를 만든 다음, 부모 프로세스는 종료해서 프로세스가 끝나는 척 하고(?) 뒤에서 자식 프로세스가 일을 시작하는 거죠. 도커에서 이렇게 하면, 부모 프로세스가 끝나는 순간 전체 컨테이너가 종료되어 버립니다.
그러니까 도커를 이용해 서비스를 시작하려면 프로세스가 foreground로 도는 게 맞습니다.
아.. 제가 글을 잘못썼네요...
지적 감사합니다.. 막연하게 알았던것을 설명해주셔서 감사합니다.
CMD 명령어 자체가 아니라 어떤 서비스를 도커로
CMD 명령어 자체가 아니라 어떤 서비스를 도커로 만들 때 CMD를 써서 지정할 명령어 부분에 뭘 적어줘야 할지를 어떻게 알 수 있냐는 말씀이신데,
저도 매번 그것 때문에 아주 골치 아프더라고요. (어찌어찌 하더라도 이게 제대로 한 건지, 별 문제는 없을지 확인하기가 어렵네요)
일단 말씀하신 apache 라거나, 웬만큼 유명하고 많이 쓰인 것들은 공식적으로 도커 이미지를 제공하니까 docker hub에서 찾아보시고, 아마도 설명을 읽다보면 github 등 링크가 되어 있어서 따라가면 Dockerfile 도 볼 수 있습니다. 그걸 참고하게 되는데, 보통은 메인 서비스를 바로 띄우도록 지정된 게 아니라 docker-entry.sh 이런 스크립트를 실행하도록 되어 있고 이 스크립트 안에서 bash 스크립트의 온갖 기교를 부리면서 ㅠ_ㅠ 환경 세팅, 사용자 전환 등을 하지요.
공식 도커 이미지가 없는 경우라도 어지간한 것들은 누군가 올려놓은 이미지가 있을 텐데 거기에 있는 Dockerfile도 참고해보고...
systemctl 이나 init.d 같은 걸 보면 각 서비스를 관리하는 스크립트나 설정이 있고 (/etc/init.d/apache 같은) 그 안을 보면 실제로 서비스를 시작하는 명령어가 있을 테니 기본적으로는 그 명령어를 넣어주시면 되겠지만, 역시나 이런 스크립트에서도 명령 실행 전 이런 저런 설정 검사나 세팅을 하는 부분이 있으니 그것도 같이 챙기려면 까다롭더라고요.
좋은 하루 되세요!
결국, dockerhub, githb군요..
감사합니다..
댓글 달기