Docker를 이용한 Django Project 생성 (with. MySQL)
mkdir docker && cd docker
FROM python:3.11
ENV PYTHONUNBUFFERED 1
RUN mkdir /code
WORKDIR /code
ADD requirements.txt /code/
RUN pip install -r requirements.txt
ADD . /code/
Django>=3.0,<4.0
mysql
* 문서에는 Django에 대해서 버전 명시가 안되어 있었는데 버전 명시 안하면 error 발생한다. 이유는 아직 찾지 못할 무.
version: '3'
services:
db:
image: mysql:8.0.31
container_name: mysql
ports:
- 3306:3306
env_file:
- .env
environment:
TZ: Asia/Seoul
web:
image: django:4.0
container_name: django
build: .
command: python manage.py runserver 0.0.0.0:8000
volumes:
- .:/code
ports:
- 8000:8000
depends_on:
- db
MYSQL_HOST=localhost
MYSQL_PORT=3306
MYSQL_ROOT_PASSWORD=root
MYSQL_DATABASE=test
MYSQL_USER=uxmin
MYSQL_PASSWORD=uxmin
환경변수를 Compose 파일에 직접 삽입하거나 실행마다 쉘에 직접 변수로 선언하는 방법은 배포 및 유지에 비효율적이기 때문에 별도의 환경변수 파일을 구성하는 것이 효율적이다.
그래서 docker-compose.yml 파일이 위치한 동일 depth에서 .env 파일을 생성하여 환경변수 세팅을 해준다.
docker compose run web django-admin.py startproject composeproject .
# 명령어로 생성된 Django Project 소유권 변경 (기본: root)
sudo chown -R $USER:$USER .
# settings.py
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'test',
'USER': 'uxmin',
'PASSWORD': 'uxmin',
'HOST': 'db',
'PORT': '3306'
}
}
docker compose up -d
# 실행 확인
docker compose ps
# NAME COMMAND SERVICE STATUS PORTS
# django "python manage.py ru…" web running 0.0.0.0:8000->8000/tcp, :::8000->8000/tcp
# mysql "docker-entrypoint.s…" db running 0.0.0.0:3306->3306/tcp, :::3306->3306/tcp, 33060/tcp
성공적으로 완료가 되었다면 여기를 눌러보세요