使用Docker Compose快速搭建Django+PostgreSQL开发环境
前言
在现代Web开发中,Django作为Python最流行的Web框架之一,常与PostgreSQL数据库搭配使用。而Docker Compose则是管理多容器应用的神器。本文将详细介绍如何使用Docker Compose快速搭建一个Django+PostgreSQL的开发环境。
环境准备
在开始之前,请确保你的系统已经安装了Docker和Docker Compose。本文假设读者已经具备基本的Docker知识。
项目结构规划
我们将创建一个包含以下核心文件的Django项目:
Dockerfile
- 定义Web服务容器的构建规则requirements.txt
- 列出Python依赖包docker-compose.yml
- 定义整个应用的服务编排- Django项目文件 - 由Django自动生成
详细步骤
1. 创建项目基础文件
首先创建一个空项目目录,然后依次创建以下文件:
Dockerfile内容:
# 指定使用Python 3作为基础镜像
FROM python:3
# 设置环境变量,防止Python生成.pyc文件
ENV PYTHONDONTWRITEBYTECODE=1
# 确保Python输出直接发送到终端而不被缓冲
ENV PYTHONUNBUFFERED=1
# 设置工作目录
WORKDIR /code
# 先复制依赖文件,这样可以利用Docker的缓存层
COPY requirements.txt /code/
# 安装Python依赖
RUN pip install -r requirements.txt
# 复制项目所有文件到工作目录
COPY . /code/
requirements.txt内容:
Django>=3.0,<4.0
psycopg2>=2.8
2. 配置Docker Compose
docker-compose.yml
文件定义了两个服务:
services:
db:
image: postgres
volumes:
- ./data/db:/var/lib/postgresql/data
environment:
- POSTGRES_DB=postgres
- POSTGRES_USER=postgres
- POSTGRES_PASSWORD=postgres
web:
build: .
command: python manage.py runserver 0.0.0.0:8000
volumes:
- .:/code
ports:
- "8000:8000"
environment:
- POSTGRES_NAME=postgres
- POSTGRES_USER=postgres
- POSTGRES_PASSWORD=postgres
depends_on:
- db
关键配置说明:
db
服务使用官方PostgreSQL镜像web
服务基于当前目录构建- 使用卷(volumes)实现代码热更新和数据库持久化
- 通过
depends_on
确保数据库服务先启动
3. 创建Django项目
执行以下命令创建Django项目:
docker compose run web django-admin startproject composeexample .
注意:在Linux系统下,生成的文件可能属于root用户,需要修改权限:
sudo chown -R $USER:$USER composeexample manage.py
4. 配置数据库连接
修改composeexample/settings.py
中的数据库配置:
import os
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.postgresql',
'NAME': os.environ.get('POSTGRES_NAME'),
'USER': os.environ.get('POSTGRES_USER'),
'PASSWORD': os.environ.get('POSTGRES_PASSWORD'),
'HOST': 'db',
'PORT': 5432,
}
}
注意这里的HOST
设置为db
,这是docker-compose.yml中定义的服务名称。
5. 启动项目
运行以下命令启动整个应用:
docker compose up
启动完成后,访问http://localhost:8000
即可看到Django的欢迎页面。
开发建议
- 开发服务器限制:Django自带的开发服务器不适合生产环境使用
- ALLOWED_HOSTS设置:开发时可设置为
['*']
,但生产环境必须指定具体域名 - 文件权限问题:在Linux系统下要注意生成文件的权限问题
- 数据库持久化:通过volume确保数据库数据不会丢失
服务管理
- 查看运行中的容器:
docker ps
- 优雅停止服务:
docker compose down
- 强制停止服务:Ctrl+C
总结
通过Docker Compose,我们实现了:
- Django应用和PostgreSQL数据库的容器化
- 开发环境的快速搭建
- 代码修改后的实时更新
- 数据库数据的持久化存储
这种配置非常适合开发阶段使用,可以大大简化环境配置和团队协作的复杂度。对于生产环境,还需要考虑添加Gunicorn等WSGI服务器、Nginx反向代理等组件。
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考