====== Coachtown Docker ====== 코치타운 서비스를 위한 도커 설치. 조금 수정하면 다른 django app 서비스에도 사용할 수 있다. ===== 1. install docker ===== sudo apt-get install docker.io ===== 2. Dockerfile ===== Dockerfile의 ADD 명령을 이용하여, 호스트에 있는 코드와 설정파일을 도커 이미지에 집어 넣는다. FROM debian MAINTAINER Donghee Park RUN apt-get update RUN apt-get install -y nginx python python-pip procps sudo #RUN echo "\ndaemon off;" >>/etc/nginx/nginx.conf RUN echo "Asia/Seoul" > /etc/timezone && dpkg-reconfigure -f noninteractive tzdata RUN echo 'root:xxxx' | chpasswd #ADD index.html /usr/share/nginx/www/index.html RUN mkdir /coachtown WORKDIR /coachtown ADD requirements.txt /coachtown/ RUN pip install virtualenv RUN pip install -r requirements.txt ADD ./ /coachtown/ ADD conf/www.coachtown.org /etc/nginx/sites-enabled/default EXPOSE 80 ===== 3. build Docker image ===== cat scripts/docker_build.sh sudo docker build -t coachtown:nginx . ===== 4. run Docker container ===== 도커 컨테이서 생성. 데이터 베이스 볼륨: 호스트에 있는 데이터베이스 파일을 쓰도록 하기 위해서, volume으로 연결하여 컨테이너에서 호스트의 데이터 베이스 파일을 읽고 쓰도록 한다. 컨테이너는 백그라운드로 돌리고 docker exec로 서버 실행 스크립트를 실행한다. Dockerfile로 이미지 생성할 때분터 서버 실행이 잘 안된다. (튜토리얼은 그렇게 하던데). 이유는 모르겠다. 기존의 컨테이너를 삭제하고, 새 컨테이너를 실행 한다. cat scripts/docker_run.sh HOSTDIR=$(pwd)/database DOCKERDIR=/database CONTAINERID=$(sudo docker ps -q) sudo docker kill $CONTAINERID sudo docker rm $CONTAINERID # background option -d sudo docker run -v $HOSTDIR:$DOCKERDIR -p 80:80 -d -i -t coachtown:nginx $@ # exec CONTAINERID=$(sudo docker ps -q) sudo docker exec -it $CONTAINERID /coachtown/restart.sh 서버 실행 스크립트. 기존의 컨테이너를 지우고, 다시 생성하는 방식. /coachtown/restart.sh #!/bin/sh ps aux | grep 'python manage.py runfcgi' | awk '{ print $2 }' | sudo xargs kill -9 if [ -d "/coachtown/mysite" ]; then COACHTOWNAPP=/coachtown/mysite else COACHTOWNAPP=mysite fi # cd mysite cd $COACHTOWNAPP sudo python manage.py runfcgi method=prefork pidfile=/tmp/django_coachtown.pid host=127.0.0.1 port=8000 sudo /etc/init.d/nginx restart