생성된 프로젝트의 디렉토리 구조는 아래와 같다.
dockerize_django_app
└─ backend
├─ config
│ ├─ settings.py
...
├─ Dockerfile
├─ manage.py
├─ Pipfile
├─ Pipfile.lock
└─ posts
우선 dockerize_django_app 디렉토리에서 backend 디렉토리를 생성하고 이동한 후, git bash를 사용하여 아래의 동작들을 수행하였다.
~/Desktop/dockerize_django_app/backend
pip install pipenv
pipenv shell
pipenv install django
pipenv install djangorestframework
django-admin startproject config .
django-admin startapp posts
다음으로는 기본적인 api 기능을 구현하고 환경을 설정하기 위해 아래와 같이 프로젝트를 수정하였다.
# settings.py
import os
...
DJANGO_APPS = [
'posts',
]
DEPENDENCIES = [
'rest_framework',
]
INSTALLED_APPS = [
"django.contrib.admin",
"django.contrib.auth",
"django.contrib.contenttypes",
"django.contrib.sessions",
"django.contrib.messages",
"django.contrib.staticfiles",
] + DEPENDENCIES + DJANGO_APPS
...
LANGUAGE_CODE = "ko-kr"
TIME_ZONE = "Asia/Seoul"
USE_I18N = True
USE_TZ = False
STATIC_URL = "static/"
STATIC_ROOT = os.path.join(BASE_DIR, 'staticfiles')
도커화시키기 위한 Dockerfile을 작성하였다. 작성한 Dockerfile은 아래와 같다.
FROM python:3.9
ENV PYTHONUNBUFFERED=1
WORKDIR /backend
RUN pip install pipenv
COPY Pipfile* /backend/
RUN pipenv requirements > requirements.txt
RUN pip install -r requirements.txt
COPY . /backend/
CMD ["python3", "manage.py", "runserver", "0.0.0.0:8000"]
EXPOSE 8000
작성한 Dockerfile을 바탕으로 이미지를 빌드한 후, 컨테이너로 해당 이미지를 백그라운드에서 실행시켜 보았다.
# 도커 이미지 빌드
$ docker build -t django_docker:1.0.0 .
# 생성된 이미지
$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
django_docker 1.0.0 816041c3b60f 18 minutes ago 1.01GB
# 이미지 실행
$ docker run -d -p 8000:8000 django_docker
c25e5a50395362804732ff1a70fb89ce7decd3257017896ca16f42bef5064322 # 컨테이너 id