2023년을 기준으로 Python에서 웹 개발을 위한 프레임워크를 생각해보면 Django와 Flask가 아직까지도 양대산맥인 것 같다.
물론 타 언어의 여러 프레임워크와 비교했을때 Python이 주류가 될 만큼 인기 있는 프로젝트들은 아니지만 큰 규모가 아니라면 충분히 걱정 안하고 써도 될만큼 훌륭한 수단이라고 생각한다.
최근 어느날 Docker로 Django를 개발해보고자 별 생각없이 Docker Hub를 찾았으나 공식 이미지가 2016년부터 Deprecated 되어있었다.
만약 Docker를 통해 Django를 개발하고자 한다면 기본 Python 이미지에 Django를 설치하여 사용하라고 안내가 되어있었으며, 본문에 친절하게 코드가 제시되어있다.
공식 이미지가 있다면 더 좋았겠으나, ARM64 아키텍쳐가 지원되지 않기 때문에 Python 기본 이미지를 쓰면 CPU 아키텍쳐 문제에서도 어느정도 자유로울 수 있기에 Python 이미지를 베이스로 Dockerfile을 통해 Django 이미지를 빌드하면 M 시리즈의 프로세서를 사용하는 macOS에서도 개발이 가능했다.
# 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 서버를 사용한다.settings.py
에 ALLOWED_HOST
를 별도로 제한하지 않았으며, 확장하여 개발 후 실제로 사용하고자 한다면 해당 설정은 반드시 변경해야한다.