在這篇技術教學文章中,我們將介紹如何使用Django和Docker Compose來創建和設置一個後端開發環境。我們將分步驟進行,從下載Django並創建項目開始,到構建Docker Compose文件以便在開發階段使用,在開始之前,您需要先下載Docker和Python到您使用的裝置上:
首先,我們需要下載Django並創建一個新的Django項目。請按照以下步驟操作:
mkdir <project root name>
pip install django
django-admin
命令創建Django項目django-admin startproject backend
接下來,我們將構建Docker Compose文件來設置開發環境。我們需要在項目根目錄下創建Dockerfile
和docker-compose-local.yml
文件,同時還需要設定requirements.txt
和.env
文件。
Dockerfile
Dockerfile是用來定義應用程序的Docker映像的配置文件。在這裡,我們將定義一個Python 3.11環境,安裝所需的Python包,並將Django項目代碼複製到容器中。在根目錄下創建一個名為Dockerfile的文件,並添加以下內容:
FROM python:3.11
LABEL maintainer="rex.ultra"
ENV PYTHONUNBUFFERED 1
WORKDIR /app
COPY requirements.txt /app/
RUN pip install --upgrade pip && pip install -r requirements.txt
COPY ./backend /app/
這邊解釋一下Dockerfile每一行是做什麼的
docker-compose-local.ymldocker-compose-local.yml
文件用來定義和管理多個Docker容器的配置。在這裡,我們將定義三個服務:backend(Django應用)、redis(Redis數據庫)、mariadb(MariaDB數據庫)。在根目錄下創建一個名為docker-compose-local.yml
的文件,並添加以下內容
version: "3.9"
services:
backend:
container_name: backend-api-services
build:
context: .
dockerfile: Dockerfile
command: python manage.py runserver 0.0.0.0:8000
env_file:
- .env
volumes:
- ./backend:/app
ports:
- "8000:8000"
restart: always
depends_on:
- mariadb
networks:
- backend_net
redis:
container_name: backend-redis
image: redis:alpine
networks:
- backend_net
mariadb:
container_name: backend-mariadb
image: mariadb:10.5
environment:
- MYSQL_ROOT_PASSWORD=${MYSQL_ROOT_PASSWORD}
- MYSQL_DATABASE=${MYSQL_DATABASE}
- MYSQL_USER=${MYSQL_USER}
- MYSQL_PASSWORD=${MYSQL_PASSWORD}
volumes:
- mariadb_data:/var/lib/mysql
networks:
- backend_net
volumes:
mariadb_data:
networks:
backend_net:
driver: bridge
requirements.txt
此文件列出了Django項目所需的所有Python包,並將在構建Docker映像時自動安裝。在根目錄下創建一個名為requirements.txt
的文件,並添加以下內容
Django>=4.0
djangorestframework
mysqlclient
redis
python-dotenv
.env
接著我們需要定義數據庫的環境變量,用於配置MariaDB數據庫。在根目錄下創建一個名為.env
的文件,並添加以下內容
MYSQL_ROOT_PASSWORD=mariadb_root_password
MYSQL_DATABASE=mydatabase
MYSQL_USER=myuser
MYSQL_PASSWORD=mypassword
通過以上步驟,我們成功地創建了一個Django項目,並使用Docker Compose來設置開發環境。這種方法不僅可以簡化開發過程,還能確保項目的可移植性和可擴展性。下一篇我們將教會您如何設定Mariadb和Redis,以及如何使用Redis!