django를 postgre와 docker을 이용해서 구동하자

Date:     Updated:

Categories:

Tags: , , ,

django 컨테이너 이미지

  • django 앱 컨테이너를 생성하고 실행한다. 블로그에 django 시작하기에서 만든 예시를 사용한다.

  • django project root directory로 가서 도커 이미지를 만든다.

  • 그 전에 django project에 dockerfile을 생성한다.

    FROM python:3
    
    WORKDIR /app
    ADD ./requirements.txt /app/
    RUN pip install -r requirements.txt
    
    ADD ./myapp /app/myapp
    ADD ./polls /app/polls
    ADD ./manage.py /app/
    
    CMD ["python", "manage.py", "runserver", "8000"]
    

    python 3버전을 포함한 이미지에서 시작.
    work directory를 /app으로 설정.
    requirements.txt를 복사 후 pip으로 설치.(의존성)
    현재의 프로젝트 폴더를 추가.
    실행

  • 도커 이미지 생성
    docker build -t <이미지이름> <Dockerfile이 있는 디렉토리>
    
  • django 프로젝트를 docker으로 실행하려면 데이터베이스 컨테이너도 필요하다.

    • postgre container 생성
    docker run -d --rm --name db \
    -e POSTGRES_DB=myappDB \
    -e POSTGRES_USER=myappUser \
    -e POSTGRES_PASSWORD=myappSecret \
    --volume=$(pwd)/docker/data:/var/lib/postgresql/data \
    postgres
    

    이 -e로 옵션을 정하는 것은 django project에서 settings.py에 정한 대로 입력하여야 한다.

  • 이제 앱 컨테이너를 실행해보자.
    docker run -it --rm \
    -p 8000:8000 \
    --link db \
    -e DJANGO_DB_HOST=db \
    --volume=$(pwd):/app/ \
    my-app-django \
    ./manage.py runserver 0:8000
    

도커 컴포즈의 활용

  • 도커 컴포즈를 사용하여 컨테이너 실행에 필요한 위 챕터의 옵션들을 관리할 수 있으며 실행 순서, 의존성도 관리할 수 있다.
version: "3"

volumes:
  postgre-volume: {}

services:
  db:
    image: postgres
    volumes:
      - postgre-volume:/var/lib/postgresql/data
    environment:
      - POSTGRES_DB=appDB
      - POSTGRES_USER=myappUser
      - POSTGRES_PASSWORD=myappSecret
      - POSTGRES_INITDB_ARGS=--encoding=UTF-8

  django:
    build:
      context: .
      dockerfile: ./Dockerfile
    environment:
      - DJANGO_DB_HOST=db
      - DJANGO_DB_PORT=5432
      - DJANGO_DB_NAME=appDB
      - DJANGO_DB_USERNAME=myappUser
      - DJANGO_DB_PASSWORD=myappSecret
      - DJANGO_SECRET_KEY=dev_secret_key
    ports:
      - 8000:8000
    volumes:
      - ./:/app/

Leave a comment