GitHub热门项目Django:在Docker容器环境下的安装与使用

云信安装大师
90
AI 质量分
10 5 月, 2025
3 分钟阅读
0 阅读

GitHub热门项目Django:在Docker容器环境下的安装与使用

引言

Django作为Python最流行的Web框架之一,在GitHub上拥有大量热门项目。使用Docker容器化部署Django项目可以简化环境配置,提高开发效率。本文将详细介绍如何在Docker环境中安装和使用Django项目。

准备工作

在开始之前,请确保你的系统已经安装了以下软件:

  • Docker (版本20.10.0或更高)
  • Docker Compose (版本1.27.0或更高)
  • Git (用于克隆GitHub项目)

可以通过以下命令检查版本:

代码片段
docker --version
docker-compose --version
git --version

步骤一:获取GitHub上的Django项目

我们以GitHub上的一个热门Django项目为例进行演示:

代码片段
# 克隆示例仓库(这里使用官方Django示例)
git clone https://github.com/django/djangoproject.com.git
cd djangoproject.com

注意:你可以替换为任何你感兴趣的GitHub上的Django项目

步骤二:创建Dockerfile

在项目根目录下创建Dockerfile文件:

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

# 设置工作目录
WORKDIR /app

# 设置环境变量
ENV PYTHONDONTWRITEBYTECODE 1
ENV PYTHONUNBUFFERED 1

# 安装系统依赖
RUN apt-get update && apt-get install -y --no-install-recommends \
    build-essential \
    libpq-dev \
    && rm -rf /var/lib/apt/lists/*

# 安装Python依赖
COPY requirements.txt .
RUN pip install --upgrade pip && \
    pip install -r requirements.txt --no-cache-dir

# 复制项目文件
COPY . .

# 收集静态文件(生产环境使用)
RUN python manage.py collectstatic --noinput

# 暴露端口
EXPOSE 8000

# 运行命令
CMD ["gunicorn", "--bind", "0.0.0.0:8000", "djangoproject.wsgi"]

关键点解释
1. python:3.9-slim – 使用轻量级的Python镜像,减少容器体积
2. PYTHONUNBUFFERED=1 – 确保Python输出直接发送到终端而不被缓冲
3. collectstatic – Django收集静态文件的命令,生产环境必备

步骤三:创建docker-compose.yml文件

为了更方便地管理服务,我们使用Docker Compose:

代码片段
version: '3.8'

services:
  web:
    build: .
    command: python manage.py runserver 0.0.0.0:8000
    volumes:
      - .:/app
    ports:
      - "8000:8000"
    environment:
      - DJANGO_SETTINGS_MODULE=djangoproject.settings.dev
    depends_on:
      - db

  db:
    image: postgres:13-alpine
    volumes:
      - postgres_data:/var/lib/postgresql/data/
    environment:
      - POSTGRES_DB=djangoproject_db
      - POSTGRES_USER=djangouser
      - POSTGRES_PASSWORD=secretpassword

volumes:
  postgres_data:

配置说明
1. web服务运行我们的Django应用,使用开发服务器(生产环境应改用Gunicorn)
2. db服务使用PostgreSQL数据库的轻量级Alpine版本
3. volumes确保数据持久化,即使容器重启也不会丢失数据

步骤四:构建并运行容器

现在我们可以构建和运行我们的容器了:

代码片段
# 构建镜像(首次运行或修改后需要)
docker-compose build

# 启动服务(后台运行)
docker-compose up -d

# 查看运行中的容器状态(可选)
docker-compose ps

# 查看日志(可选)
docker-compose logs -f web

提示:首次运行时可能需要执行数据库迁移:

代码片段
docker-compose exec web python manage.py migrate

步骤五:访问应用并验证

打开浏览器访问:

代码片段
http://localhost:8000/

你应该能看到Django项目的首页。如果没有显示预期页面,可以检查日志排查问题。

Django常用开发命令(在容器中执行)

以下是一些常用的开发命令示例:

代码片段
# 进入web容器的bash shell(方便执行其他命令)
docker-compose exec web bash

# Django数据库迁移(模型变更后需要执行)
docker-compose exec web python manage.py makemigrations
docker-compose exec web python manage.py migrate

# 创建超级用户(访问admin后台)
docker-compose exec web python manage.py createsuperuser

# Django shell交互环境(调试用)
docker-compose exec web python manage.py shell_plus --ipython

# Python包管理(添加新依赖后)
docker-compose exec web pip install package_name==version && docker-compose exec web pip freeze > requirements.txt && docker-compose build web 

Docker生产环境优化建议

对于生产环境部署,建议做以下调整:

  1. 使用Gunicorn替代开发服务器

    代码片段
    command: gunicorn --bind :8000 --workers=4 djangoproject.wsgi:application 
    
  2. 添加Nginx反向代理

    代码片段
    nginx:
      image: nginx:alpine 
      volumes:
        - ./nginx.conf:/etc/nginx/conf.d/default.conf 
      ports:
        - "80:80"
      depends_on:
        - web 
    
  3. 配置静态文件服务

    代码片段
    # nginx.conf示例内容 
    server {
      listen       80;
      server_name localhost;
    
      location /static/ {
          alias /app/staticfiles/;
      }
    
      location / {
          proxy_pass http://web:8000;
          proxy_set_header Host $host;
          proxy_set_header X-Real-IP $remote_addr;
          proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
      }
    }
    

常见问题解决指南

Q1: Docker构建失败提示找不到requirements.txt?

A1:

代码片段
touch requirements.txt #如果不存在则创建空文件 
echo "django>=3.2" >> requirements.txt #至少添加Django依赖 

Q2: PostgreSQL连接失败?

A2:
1. 检查数据库服务是否启动

代码片段
docker-compose logs db <br>
   

2. 确认settings.py中的数据库配置正确

代码片段
DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.postgresql',
        'NAME': 'djangoproject_db',
        'USER': 'djangouser',
        'PASSWORD': 'secretpassword',
        'HOST': 'db', # docker compose中的服务名 
        'PORT': '5432',
    }
}<br>
   

Q3: Django静态文件404错误?

A3:
1. 确保settings.py中有正确配置

代码片段
STATIC_URL = '/static/'
STATIC_ROOT = os.path.join(BASE_DIR, 'staticfiles') # docker中收集静态文件的目录 <br>
   

2. 执行收集静态文件命令

代码片段
docker-compose exec web python manage.py collectstatic --noinput <br>
   

Docker清理和维护技巧

代码片段
#停止并删除所有容器、网络、卷和镜像(谨慎使用!)
docker system prune --all --volumes 

#查看磁盘占用情况  
docker system df 

#删除未使用的卷  
docker volume prune 

#删除所有停止的容器  
docker container prune 

#重建特定服务(修改配置后)  
docker-compose up -d --build web  

总结

通过本文的学习,你应该已经掌握了:

✅ GitHub上获取和运行Django项目的完整流程
✅ Docker环境下搭建Django应用的详细步骤
✅ Django+Docker开发和生产环境的配置差异
✅ Docker Compose管理多服务的实用技巧
✅ Django+Docker常见问题的解决方案

将Django与Docker结合使用可以带来诸多优势:
🔹 环境一致性:团队中每个开发者拥有相同的开发环境
🔹 快速部署:一次构建即可在任何支持Docker的平台运行
🔹 资源隔离:避免不同项目的依赖冲突

希望这篇教程能帮助你顺利开始你的Docker+Django开发之旅!

原创 高质量