Windows XP Windows 7 Windows 2003 Windows Vista Windows 綜合教學 Linux 系統教學
Windows 10 Windows 8 Windows 2008 Windows NT Windows Server 電腦軟體教學
您现在的位置: Windows教程網 >> Windows教程 >  >> Linux 系統教學 >> 關於 Linux

Linux 使用 Docker Compose 開發 Django 專案完整實戰

編輯:關於 Linux

Docker 通過容器化實現「構建一次、到處運行」,配合 Docker Compose 編排多容器應用,能快速搭建包含 Django、PostgreSQL、Redis、Nginx、數據卷的完整開發環境。本文基於 dockerizing-django 專案結構,詳細演示從本地設置到容器啟動的全過程。

Django Docker 架構圖

目標架構:五容器協作

容器職責關鍵技術
Web / Django運行 Django 應用(Gunicorn/uWSGI)Python 3、依賴隔離、熱重載
Nginx反向代理、靜態文件服務、SSL 終結nginx.conf、upstream、卷掛載靜態文件
PostgreSQL關係型數據庫持久化官方镜像、環境變量初始化、數據卷
Redis緩存、會話存儲、Celery Broker官方镜像、持久化配置
Data Volume共享靜態文件、媒體文件、數據庫文件Docker Volume、bind mount

本地環境準備

# 安裝 Docker Engine(參考官方文檔)
# 安裝 Docker Compose
sudo curl -L "https://github.com/docker/compose/releases/download/v2.24.0/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose

# 驗證版本
docker --version          # 20.10+
docker-compose --version  # 2.x

專案結構與核心配置文件

.
├── docker-compose.yml        # 開發環境編排
├── production.yml            # 生產環境覆蓋配置
├── nginx/
│   ├── Dockerfile
│   └── sites-enabled/
│       └── django_project    # Nginx 站點配置
└── web/
    ├── Dockerfile            # Django 構建文件
    ├── docker_django/        # Django 專案代碼
    │   ├── apps/
    │   ├── settings.py
    │   ├── urls.py
    │   └── wsgi.py
    ├── manage.py
    ├── requirements.txt
    └── static/

docker-compose.yml 關鍵片段

version: '3.8'

services:
  postgres:
    image: postgres:15-alpine
    environment:
      POSTGRES_DB: django_db
      POSTGRES_USER: django_user
      POSTGRES_PASSWORD: secret
    volumes:
      - postgres_data:/var/lib/postgresql/data
    healthcheck:
      test: ["CMD-SHELL", "pg_isready -U django_user -d django_db"]
      interval: 10s
      timeout: 5s
      retries: 5

  redis:
    image: redis:7-alpine
    volumes:
      - redis_data:/data
    command: redis-server --appendonly yes

  web:
    build: ./web
    command: python manage.py runserver 0.0.0.0:8000
    volumes:
      - ./web:/app
      - static_volume:/app/static
      - media_volume:/app/media
    ports:
      - "8000:8000"
    depends_on:
      postgres:
        condition: service_healthy
      redis:
        condition: service_started
    environment:
      - DEBUG=1
      - DATABASE_URL=postgres://django_user:secret@postgres:5432/django_db
      - REDIS_URL=redis://redis:6379/0

  nginx:
    build: ./nginx
    ports:
      - "80:80"
      - "443:443"
    volumes:
      - static_volume:/var/www/static
      - media_volume:/var/www/media
    depends_on:
      - web

volumes:
  postgres_data:
  redis_data:
  static_volume:
  media_volume:

web/Dockerfile 要點

FROM python:3.11-slim

ENV PYTHONDONTWRITEBYTECODE=1 \
    PYTHONUNBUFFERED=1 \
    PIP_NO_CACHE_DIR=1

WORKDIR /app

# 安裝系統依賴(psycopg2、pillow 等需要)
RUN apt-get update && apt-get install -y --no-install-recommends \
    libpq-dev gcc libc-dev && \
    rm -rf /var/lib/apt/lists/*

COPY requirements.txt .
RUN pip install -r requirements.txt

COPY . .

EXPOSE 8000

# 開發環境用 runserver,生產換 gunicorn
CMD ["python", "manage.py", "runserver", "0.0.0.0:8000"]

nginx/sites-enabled/django_project

upstream django {
    server web:8000;
}

server {
    listen 80;
    server_name localhost;

    location /static/ {
        alias /var/www/static/;
        expires 30d;
    }

    location /media/ {
        alias /var/www/media/;
        expires 30d;
    }

    location / {
        proxy_pass https://django;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
    }
}

啟動與常用操作

# 構建並後台啟動所有服務
docker-compose up -d --build

# 查看日志
docker-compose logs -f web
docker-compose logs -f nginx

# 進入 Web 容器執行管理命令
docker-compose exec web python manage.py migrate
docker-compose exec web python manage.py createsuperuser
docker-compose exec web python manage.py collectstatic --noinput

# 停止並移除容器、網絡(保留卷數據)
docker-compose down

# 完全清理(含卷數據,慎用)
docker-compose down -v

開發效率提升技巧

  • 代碼熱重載:volumes: - ./web:/app 將本地代碼掛載進容器,runserver 自動檢測文件變更重啟。
  • 依賴緩存:requirements.txt 單獨 COPY 並 RUN pip install,利用 Docker 層緩存加速構建。
  • 數據庫遷移持久化:PostgreSQL 數據存儲於 postgres_data 卷,容器重建不丟失數據。
  • 調試斷點:在 settings.py 配置 DEBUG=True,IDE 遠程調試連接容器 8000 端口。

生產環境遷移建議

  1. 使用 production.yml 覆蓋:關閉 DEBUG、Gunicorn 多進程、Nginx 啟用 SSL、靜態文件由 Nginx 直接服務。
  2. 引入 docker-compose -f docker-compose.yml -f production.yml up -d 疊加部署。
  3. 配置日志驅動(json-file / syslog / ELK)、監控(Prometheus + cAdvisor)、備份策略(定時 pg_dump 到對象存儲)。
  4. 考慮 Kubernetes(Helm Chart / Kustomize)進行生產級編排。

掌握 Docker Compose 編排 Django 全棧應用,能讓團隊擁有一致、可復現、易擴展的開發環境,大幅減少「在我機器上能跑」的問題,加速從代碼到上線的交付流程。

Copyright © Windows教程網 All Rights Reserved