每天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大礼包。最后,祝您早日实现财务自由,还请给个赞,谢谢!