본문 바로가기

공부기록/Data Engineering

[Docker] Docker Compose로 Django 프로젝트 세팅

반응형

프로젝트 컴포넌트 정의

프로젝트를 시작하기위해 Dockerfile, python dependencies파일, docker-compoes.yml파일이 필요하다.

Dockerfile

먼저, 디렉토리에 Dockerfile을 생성한다.

# syntax=docker/dockerfile:1
FROM python:3
ENV PYTHONDONTWRITEBYTECODE=1
ENV PYTHONUNBUFFERED=1 
WORKDIR /code # 작업 디렉토리를 code로 변경
COPY . . # 현재 디렉터리의 모든 파일 이미지를 작업 디렉터리로 복사
RUN pip install -r requirements.txt 
COPY . /code/

이 도커 파일은 파이썬3 Parent 이미지를 시작한다. 부모 이미지는 src라는 새로운 디렉토리를 추가하고, requirements.txt를 설치한다.

docker-compose.yml

다음은 docker-compose.yml파일을 생성한다. 이 파일은 어떤 웹서버와 데이터베이스를 사용할건지 등등 우리가 만들 앱의 서비스를 설명한다.
또한, 이 서비스에 사용될 도커 이미지들과 이것들을 연결하는 방법, 컨터이너 내부에 마운트해야할 볼륨, 노출될 포트 등을 설명한다.

 

version: "3.9"

services:
  db:
    image: postgres
    volumes:
      - ./data/db:/var/lib/postgresql/data
    environment:
      - POSTGRES_DB=postgres
      - POSTGRES_USER=postgres
      - POSTGRES_PASSWORD=postgres
  web:
    build: .
    command: python manage.py runserver 0.0.0.0:8000
    volumes:
      - .:/code
    ports:
      - "8000:8000"
    environment:
      - POSTGRES_NAME=postgres
      - POSTGRES_USER=postgres
      - POSTGRES_PASSWORD=postgres
    depends_on:
      - db

위와 같이 파일을 작성한 후 닫는다.

db 서비스와 web 서비스를 만드는데 web서비스가 돌아가기전에 db서비스가 먼저 돌아갈 수 있도록 depends_on을 설정한다.

 

장고 프로젝트 생성

이제 루트 페이지로 가서 docker-compose run을 한다.

sudo docker-compose run web django-admin startproject myproject .

django-admin 명령어를 실행해서 myproject 라는 프로젝트를 생성한다.

이 명령어를 실행하면 myproject 디렉터리에 django 프로젝트가 생성된다.

 

 

ls -l

docker-compose 내용을 확인한다.

 

DB 연결

# settings.py
   
import os
   
[...]
   
DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.postgresql',
        'NAME': os.environ.get('POSTGRES_NAME'),
        'USER': os.environ.get('POSTGRES_USER'),
        'PASSWORD': os.environ.get('POSTGRES_PASSWORD'),
        'HOST': 'db',
        'PORT': 5432,
    }
}

settings.py에 들어가서 DATABASES에 관한 정보를 수정한다.

 

Run docker-compose up

docker-compose up을 하면 아래와 같이 localhost 8000번 포트에서 장고를 시작페이지를 확인할 수 있다.

docker-compose up

 

 

 

ctrl-c를 하거나

docker-compose down

을 통해 실행을 종료할 수 있다.

reference

Docker docs-Quickstart: Compose and Django

반응형