Docker로 Python Django 개발하기

graphy-young·2023년 11월 10일
0
post-thumbnail

Developing Python Django with Docker

Django

개요


2023년을 기준으로 Python에서 웹 개발을 위한 프레임워크를 생각해보면 Django와 Flask가 아직까지도 양대산맥인 것 같다.
물론 타 언어의 여러 프레임워크와 비교했을때 Python이 주류가 될 만큼 인기 있는 프로젝트들은 아니지만 큰 규모가 아니라면 충분히 걱정 안하고 써도 될만큼 훌륭한 수단이라고 생각한다.

최근 어느날 Docker로 Django를 개발해보고자 별 생각없이 Docker Hub를 찾았으나 공식 이미지가 2016년부터 Deprecated 되어있었다.

만약 Docker를 통해 Django를 개발하고자 한다면 기본 Python 이미지에 Django를 설치하여 사용하라고 안내가 되어있었으며, 본문에 친절하게 코드가 제시되어있다.

공식 이미지가 있다면 더 좋았겠으나, ARM64 아키텍쳐가 지원되지 않기 때문에 Python 기본 이미지를 쓰면 CPU 아키텍쳐 문제에서도 어느정도 자유로울 수 있기에 Python 이미지를 베이스로 Dockerfile을 통해 Django 이미지를 빌드하면 M 시리즈의 프로세서를 사용하는 macOS에서도 개발이 가능했다.

Dockerfile

# Use the official Python 3.8 image as the base image
FROM python:3.8

# Set the default value for the 'app_name' argument
ARG app_name=django
ENV APP_NAME $app_name  

# Set the PYTHONUNBUFFERED environment variable to ensure Python prints directly to terminal
ENV PYTHONUNBUFFERED 1

# Set the working directory inside the container to '/django'
WORKDIR /django

# Install Django using pip
RUN pip install Django

# RUN apt-get update && apt-get install -y mariadb-client

# Start a new Django project named as specified in the 'app_name' argument
RUN django-admin startproject $app_name

# Update the 'ALLOWED_HOSTS' setting in the Django project's settings.py file
RUN sed -i "s/ALLOWED_HOSTS = \[\]/ALLOWED_HOSTS = \['*'\]/g" ./${APP_NAME}/${APP_NAME}/settings.py

# Expose port 8000 to allow external access
EXPOSE 8000

# Specify the command to run the Django development server when the container starts
CMD ["sh", "-c", "python ./${APP_NAME}/manage.py runserver 0.0.0.0:8000"]
  • app_name 변수는 자유롭게 변경해도 되며, 해당 코드는 별도의 DBMS를 사용하지 않는 기본 내장 sqlite를 사용하여 Django 서버를 사용한다.
  • 만약 mariaDB 또는 PostgreSQL을 사용하고자 하면 주석처리된 mariadb-client 설치 코드를 주석 해제하여 사용하며, 별도의 컨테이너 또는 서버에 연결하는 작업이 추가로 필요하다
  • 개발용 서버이기에 settings.pyALLOWED_HOST를 별도로 제한하지 않았으며, 확장하여 개발 후 실제로 사용하고자 한다면 해당 설정은 반드시 변경해야한다.
profile
키보드 한 자루로 시작하는 데이터 엔지니어링 삽질기

0개의 댓글