当前位置: 首页 > article >正文

每天40分玩转Django:Django Docker化学习指南

Django Docker化学习指南

1. 学习目标

  • 理解Docker容器化的基本概念和优势
  • 掌握Django应用的Docker化过程
  • 学习使用Docker Compose管理多容器应用

2. 核心知识点

知识点重要程度掌握要求
Dockerfile编写⭐⭐⭐⭐⭐熟练掌握
Docker基本命令⭐⭐⭐⭐熟练掌握
Docker Compose配置⭐⭐⭐⭐⭐熟练掌握
多容器通信⭐⭐⭐⭐了解原理
容器化最佳实践⭐⭐⭐⭐理解并应用

3. Django应用Docker化示例

3.1 项目结构

myproject/
├── Dockerfile
├── docker-compose.yml
├── requirements.txt
├── manage.py
├── myproject/
│   ├── __init__.py
│   ├── settings.py
│   ├── urls.py
│   └── wsgi.py
└── myapp/
    ├── __init__.py
    ├── models.py
    ├── views.py
    └── urls.py

3.2 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 \
        postgresql-client \
        gcc \
        python3-dev \
    && rm -rf /var/lib/apt/lists/*

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

# 复制项目文件
COPY . .

# 暴露端口
EXPOSE 8000

# 启动命令
CMD ["gunicorn", "--bind", "0.0.0.0:8000", "myproject.wsgi:application"]

3.3 requirements.txt

Django>=3.2,<4.0
gunicorn>=20.1.0
psycopg2-binary>=2.9.1
redis>=4.0.0
celery>=5.2.0

3.4 docker-compose.yml

version: '3.8'

services:
  web:
    build: .
    command: python manage.py runserver 0.0.0.0:8000
    volumes:
      - .:/app
    ports:
      - "8000:8000"
    environment:
      - DEBUG=1
      - DJANGO_SETTINGS_MODULE=myproject.settings
      - DATABASE_URL=postgresql://postgres:postgres@db:5432/myproject
    depends_on:
      - db
      - redis

  db:
    image: postgres:13
    volumes:
      - postgres_data:/var/lib/postgresql/data
    environment:
      - POSTGRES_DB=myproject
      - POSTGRES_USER=postgres
      - POSTGRES_PASSWORD=postgres

  redis:
    image: redis:6-alpine
    ports:
      - "6379:6379"

  celery:
    build: .
    command: celery -A myproject worker -l INFO
    volumes:
      - .:/app
    environment:
      - DEBUG=1
      - DJANGO_SETTINGS_MODULE=myproject.settings
      - DATABASE_URL=postgresql://postgres:postgres@db:5432/myproject
      - CELERY_BROKER_URL=redis://redis:6379/0
    depends_on:
      - web
      - redis

volumes:
  postgres_data:

3.5 修改Django设置

# settings.py

import os

# 数据库配置
DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.postgresql',
        'NAME': os.environ.get('POSTGRES_DB', 'myproject'),
        'USER': os.environ.get('POSTGRES_USER', 'postgres'),
        'PASSWORD': os.environ.get('POSTGRES_PASSWORD', 'postgres'),
        'HOST': os.environ.get('POSTGRES_HOST', 'db'),
        'PORT': os.environ.get('POSTGRES_PORT', '5432'),
    }
}

# Redis配置
REDIS_HOST = os.environ.get('REDIS_HOST', 'redis')
REDIS_PORT = os.environ.get('REDIS_PORT', '6379')

# Celery配置
CELERY_BROKER_URL = f'redis://{REDIS_HOST}:{REDIS_PORT}/0'
CELERY_RESULT_BACKEND = f'redis://{REDIS_HOST}:{REDIS_PORT}/0'

4. 部署流程图

在这里插入图片描述

5. 部署步骤详解

5.1 构建镜像

# 构建Docker镜像
docker-compose build

# 启动所有服务
docker-compose up -d

# 执行数据库迁移
docker-compose exec web python manage.py migrate

# 创建超级用户
docker-compose exec web python manage.py createsuperuser

# 收集静态文件
docker-compose exec web python manage.py collectstatic --no-input

5.2 常用Docker命令

# 查看容器状态
docker-compose ps

# 查看容器日志
docker-compose logs -f web

# 进入容器shell
docker-compose exec web bash

# 重启服务
docker-compose restart web

# 停止所有服务
docker-compose down

6. 生产环境注意事项

6.1 安全配置

# settings.py

# 生产环境配置
DEBUG = False
ALLOWED_HOSTS = ['your-domain.com', 'www.your-domain.com']

# 安全设置
SECURE_SSL_REDIRECT = True
SESSION_COOKIE_SECURE = True
CSRF_COOKIE_SECURE = True
SECURE_BROWSER_XSS_FILTER = True
SECURE_CONTENT_TYPE_NOSNIFF = True
X_FRAME_OPTIONS = 'DENY'

6.2 生产环境docker-compose.yml

version: '3.8'

services:
  web:
    image: your-registry/myproject:latest
    restart: always
    environment:
      - DJANGO_SETTINGS_MODULE=myproject.settings.production
      - SECRET_KEY=${DJANGO_SECRET_KEY}
      - DATABASE_URL=${DATABASE_URL}
    depends_on:
      - db
      - redis

  nginx:
    image: nginx:alpine
    ports:
      - "80:80"
      - "443:443"
    volumes:
      - ./nginx.conf:/etc/nginx/conf.d/default.conf:ro
      - ./static:/static
      - ./media:/media
      - ./certs:/etc/nginx/certs
    depends_on:
      - web

6.3 Nginx配置示例

upstream django {
    server web:8000;
}

server {
    listen 80;
    server_name your-domain.com;

    location /static/ {
        alias /static/;
    }

    location /media/ {
        alias /media/;
    }

    location / {
        proxy_pass http://django;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
    }
}

7. 调试和故障排除

7.1 常见问题和解决方案

问题解决方案
数据库连接失败检查环境变量和数据库配置
静态文件404确认collectstatic命令执行成功
容器启动失败查看docker-compose logs输出
性能问题调整Gunicorn工作进程数和超时设置

7.2 性能优化建议

  • 使用Docker多阶段构建减少镜像大小
  • 配置Docker volume持久化数据
  • 使用Docker网络隔离服务
  • 实现健康检查确保服务可用性
  • 合理设置缓存策略

8. 扩展阅读和资源

  • Docker官方文档
  • Django部署最佳实践
  • Docker Compose文档
  • Nginx配置指南
  • PostgreSQL容器化指南

以上内容涵盖了Django应用Docker化的主要方面,包括基本配置、生产环境部署、性能优化等。建议按照步骤实践,并根据实际项目需求进行调整。在实施过程中要特别注意安全配置和性能优化。


怎么样今天的内容还满意吗?再次感谢朋友们的观看,关注GZH:凡人的AI工具箱,回复666,送您价值199的AI大礼包。最后,祝您早日实现财务自由,还请给个赞,谢谢!


http://www.kler.cn/a/471525.html

相关文章:

  • 加速物联网HMI革命,基于TouchGFX的高效GUI显示方案
  • Selenium 八大元素定位方法及场景扩展
  • asp.net core中的 Cookie 和 Session
  • [项目实战2]贪吃蛇游戏
  • Flutter鸿蒙化 在鸿蒙应用中添加Flutter页面
  • C# 检查一个字符串是否是科学计数法格式字符串 如 1.229266E+01
  • 人工智能前沿探讨:从Transformer架构到机器意识与迁移学习的应用
  • 数据库模型全解析:从文档存储到搜索引擎
  • NodeJs 箭头函数:`()=>{}` 和 `()=>()` 的区别与使用场景
  • 使用ros_readbagfile脚本提取感兴趣的话题
  • Mac上鸿蒙配置HDC报错:zsh: command not found: hdc -v
  • 大风车excel:如何题库批量导入excel?批量导入
  • 年会抽奖Html
  • VSCode 插件全解析:解锁编码新维度
  • Ubuntu20.04中EasyConnect启动报错
  • C++编程基础:类型转换四式速记const_cast,dynamic_cast,reinterpret_cast,static_cast
  • PHP语言的多线程编程
  • 【顶刊TPAMI 2025】多头编码(MHE)之Part 6:极限分类无需预处理
  • IO Virtualization with Virtio.part 2 [十三]
  • 【漏洞分析】DDOS攻防分析(二)
  • MATLAB语言的语法糖
  • asammdf python 处理MF4文件库简介
  • C# AIModelRouter:使用不同的AI模型完成不同的任务
  • 深圳跨境电商建站外贸电商建站哪家好?
  • Sam Altman发布博客,回顾OpenAI九年历程,直言目标已瞄准ASI超级人工智能
  • Oracle LiveLabs实验: Multitenant Advanced Capabilities