티스토리 뷰
파이썬 웹 프레임워크 Django로 만든 프로젝트를 Django + uWSGI + NGINX로 웹에 띄우기 위해 Docker Container을 이용하는 과정에서 생긴 고민.
물론, Dockerfile을 작성하지 않고 컨테이너에 ubuntu나 centos만 설치해서 그 안에 들어가 직접 띄울 수 있지만, Kubernetes까지 활용해 자동화 시키려면 Dockerfile로 만드는게 깔끔할 것이라 생각함.
여기서
uWSGI와 NGINX 둘 다 daemon으로 실행시켜야하는데, Dockerfile에서 어떻게 작성하지?
에 대한 고민을 해결한 과정에 대해 적어봄..
일단, Dockerfile 작성 시 컨테이너를 계속 띄우고 싶다면 foreground로 실행시켜야 함.
[참고] https://hyewon-s-dev.tistory.com/6
[Docker/Error] Dockerfile을 이용해 만든 이미지로 실행시킨 컨테이너가 바로 꺼지는 이유
여러 이유가 있겠지만, 도커를 구글링으로만 배워 얕은 지식을 가지고 에러 해결을 위해 헤맨 과정에 대한 기록. docker logs도 확인해봤을 때 에러 안떠서 머리를 싸메고 있다면 보세요 ..... 급하
hyewon-s-dev.tistory.com
Dockerfile에서 컨테이너가 실행된 후에 명령어를 입력하게 하고싶다면 CMD를 활용해야 함
[참고] RUN은 컨테이너 실행 이전에, CMD는 컨테이너가 실행된 후에 입력됨
그러나, CMD는 Dockerfile 내 Stage 당 하나밖에 쓰지 못함. uWSGI와 NGINX를 활용해 웹 배포를 할 때에 둘 다 데몬으로 실행되는 애들이라, CMD에 둘 다 실행시켜야하는 상황이었음. 여기서 생각한 방법은 총 3가지.(결국 마지막 방법으로 했어요 급하면 세번째 방법 ㄱㄱ)
[시도1] Dockerfile 내 CMD에 && 명령어로 두 명령어를 한 줄에 실행되도록 함
[시도2] Django + uWSGI를 다른 컨테이너로 실행시키고, 그 ip주소를 가져와 NGINX에 연결
[시도3] shell script 작성해서 실행시킴
[시도1] Dockerfile 내 CMD에 && 명령어로 두 명령어를 한 줄에 실행되도록 함
터미널에서도 한 줄로 입력하려면 && 이용하듯이,
uWSGI는 데몬으로, NGINX는 daemon off;로 실행시키고자 입력했었는데
CMD ["{uwsgi 실행 파일}", "--ini", "uwsgi.ini", "&&", "{nginx 실행 파일}", "-g", "daemon off;"]
기억 상으로는 뒤쪽의 nginx 부분도 uwsgi의 옵션으로 인식하는 것 같았음. 그래서 실패.
[시도2] Django + uWSGI를 다른 컨테이너로 실행시키고, 그 ip주소를 가져와 NGINX에 연결
Django + uWSGI를 먼저 포트 8000으로 컨테이너를 실행시킨 다음, 그 8000 포트를 NGINX config 파일 작성 시
upstream django {
server 0.0.0.0:8000;
}
로 작성하고 실행했는데, 굉장히 무거운 것 같았음.. 바이트 수를 넘어간다그랬나..? (uwsgi.sock로 실행시켜야 함)
에러 메시지를 따로 저장을 안해뒀어서, 시간나면 다시 해보고 정리해보겠음. 아무튼 그래서 실패.
[시도3] shell script 작성해서 실행시킴
무난하게 셸 스크립트로 작성해서 실행시킴. 도커 CMD에는 셸 스크립트 실행시키고, 셸 스크립트 내부에는
./uwsgi --ini uwsgi.ini
./nginx -g 'daemon off;'
이런 식으로 작성해서 실행 (uwsgi - 데몬실행, nginx - daemon off)
(uwsgi 실행파일과 nginx 실행파일 위치는 각자 다운받은 위치 확인하시고 설정해주세요)
실행은 되는데, docker logs로 로그 확인했을 때, nginx에 대한 로그가 뜨지 않는 것 같았음.
실행 되는걸로 만족 .....
더 좋은 방법 있다면, 피드백 주시면 감사하겠습니다.
피드백, 틀린 부분 지적 환영입니다 :)
- Total
- Today
- Yesterday
- venv
- 일괄변경
- vi
- PostgreSQL
- haproxy
- vim
- 가상환경
- Python
- docker
- cache
- Linux
- css적용
- 웹배포
- static서버
- django
- flask
- nginx
- dockerfile
- redis
- Error
- loadBalancing
- uwsgi
- 수동설치
- Database
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |