使用 Docker 部署 Django 项目可以大大简化环境配置,同时便于项目的迁移和扩展。以下是一个完整的流程,包括如何构建 Docker 镜像和启动 Django 项目。


步骤 1: 准备 Django 项目

确保你的 Django 项目可以正常运行,并且有以下关键文件:

  • requirements.txt:列出项目依赖项。
  • manage.py:Django 的主管理脚本。
  • settings.py:包含项目的配置。

如果还没有 requirements.txt 文件,可以使用以下命令生成:

pip freeze > requirements.txt

步骤 2: 创建 Dockerfile

在项目根目录创建一个名为 Dockerfile 的文件,用于定义镜像的构建过程。

Dockerfile 示例

# 使用官方 Python 镜像作为基础镜像
FROM python:3.9-slim

# 设置工作目录
WORKDIR /app

# 复制项目文件到镜像中
COPY . /app

# 安装系统依赖和项目依赖
RUN apt-get update && apt-get install -y \
    gcc libpq-dev && \
    pip install --no-cache-dir -r requirements.txt

# 暴露应用端口(Django 默认端口)
EXPOSE 8000

# 启动命令
CMD ["python", "manage.py", "runserver", "0.0.0.0:8000"]

步骤 3: 创建 Docker Compose 文件(可选)

如果需要使用数据库(如 PostgreSQL 或 MySQL),建议使用 Docker Compose 管理多个服务。在项目根目录创建 docker-compose.yml 文件。

docker-compose.yml 示例

version: '3.9'
services:
  web:
    build: .
    ports:
      - "8000:8000"
    volumes:
      - .:/app
    depends_on:
      - db
  db:
    image: postgres:13
    environment:
      POSTGRES_USER: django
      POSTGRES_PASSWORD: password
      POSTGRES_DB: django_db
    ports:
      - "5432:5432"

settings.py 中配置数据库:

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.postgresql',
        'NAME': 'django_db',
        'USER': 'django',
        'PASSWORD': 'password',
        'HOST': 'db',  # 服务名应与 docker-compose.yml 中的服务名一致
        'PORT': '5432',
    }
}

步骤 4: 构建和运行容器

  1. 构建 Docker 镜像: 如果未使用 Docker Compose,直接运行以下命令:
docker build -t django-app .
  1. 运行容器
docker run -p 8000:8000 django-app
  1. 使用 Docker Compose: 如果使用了 Docker Compose,运行以下命令:
docker-compose up --build

步骤 5: 访问项目

打开浏览器访问 http://<服务器IP>:8000,应该可以看到 Django 项目的欢迎页面。


步骤 6: 处理静态文件(生产环境)

在生产环境中,需要收集静态文件并配置 Web 服务器(如 Nginx)来处理它们。

  1. 修改 Dockerfile
RUN python manage.py collectstatic --noinput
  1. 配置 Nginx(示例配置略),将静态文件目录映射为 Nginx 可访问路径。

这样,你就可以通过 Docker 部署一个完整的 Django 项目了!如果你有特定需求或问题,可以进一步调整或优化配置。