우서 도커파일을 작성해서 환경변수 및 필요한 소프트웨어를 추가합니다.
# syntax=docker/dockerfile:1
FROM python:3
ENV PYTHONDONTWRITEBYTECODE=1
ENV PYTHONUNBUFFERED=1
WORKDIR /code
COPY requirements.txt /code/
RUN pip install -r requirements.txt
COPY . /code/
의 순서로 위의 도커파일은 이루어져 있다
필요한 패키지 목록은 requirements.txt 파일을 생성하고
Django>=3.0,<4.0
psycopg2>=2.8
를 작성해주고 작업디렉토리 상에 저장해주면 된다.
docker compose file 의 경우 얌파일이라고 부르고 확장자명은
(.yml)이다
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
이 docker-compose.yml 파일은 두개의 서비스를 정의하는데 하나씩 알아보자
파일을 저장하고 닫습니다.
sudo docker compose run web django-admin startproject composeexample .
위 명령어를 통해 django 프로젝트를 생성한다.
# 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,
}
}
이제 작업 최상위 디렉토리에서
docker compose up
명령어를 실행해준다
다음과 같이 웹 서버가 띄워진 것을 볼 수 있다.
** window10 기준에서는 composeexample/settings.py파일에 docker host 이름 또는 ip주소를 목록에 추가해주어야한다.
ALLOWED_HOSTS = ['*']
docker container ls
위의 명령어로 실행중인 컨테이너를 확인할 수 있다.
ctrl-c 를 통해 서버를 종료하고
docker compose down 을 통해 서비스를 종료해주자
앱을 종료하면 django 프로젝트 디렉토리 ex) rd /s /q folder_name 를 통해 전체 폴더를 제거할 수 있다.
- 위 명령어에서 /s는 폴더의 하위 폴더와 파일도 모두 삭제하도록 지정한다.
- /q는 삭제 작업을 확인하지 않고 바로 진행하도록 지정한다.
- folder_name은 삭제할 폴더의 이름이다.