Docker Compose를 사용하여 간단한 Django/PostgreSQL 앱을 설정해보자. docker document에 방법이 아주 잘 나와있다.
docker-compose
라는 폴더를 만들었다.
디렉터리에 Dockerfile
파일을 생성한 후 아래 내용 복붙 저장.
# 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
파일을 생성한 후 아래 내용 복붙 저장. 이 파일은 Dockerfile
안의 RUN pip install -r requirements.txt
부분에서 사용될 파일이다. django랑 psycopg를 설치한다.
Django>=3.0,<4.0
psycopg2>=2.8
디렉터리에 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
아래 커멘드를 실행하면 composeexample
라는 이름의 프로젝트 폴더가 생성된다.
$ sudo docker-compose run web django-admin startproject composeexample .
ls -l
커멘드로 프로젝트의 내용을 확인할 수 있다. 여기서 파일의 소유권자를 확인할 수 있는데, manage.py
의 소유권이 root에 있음을 알 수 있다. 이 파일의 소유권을 변경하자.
$ sudo chown -R $USER:$USER composeexample manage.py
프로젝트폴더 composeexample
안에 settings.py
파일이 있다. os 모듈을 import하고 DATABASES 내용을 변경하자.
# 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
커멘드를 실행하면 지금까지 열심히 작성한 컨테이너가 실행된다.
컨테이너 종료.