User Tools

Site Tools


docker:coachtown

Coachtown Docker

코치타운 서비스를 위한 도커 설치. 조금 수정하면 다른 django app 서비스에도 사용할 수 있다.

1. install docker

sudo apt-get install docker.io

2. Dockerfile

Dockerfile의 ADD 명령을 이용하여, 호스트에 있는 코드와 설정파일을 도커 이미지에 집어 넣는다.

FROM debian 
MAINTAINER Donghee Park <dongheepark@gmail.com>

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
docker/coachtown.txt · Last modified: 2018/07/18 14:10 by 127.0.0.1