使用Docker Compose快速搭建Django+PostgreSQL开发环境

使用Docker Compose快速搭建Django+PostgreSQL开发环境

awesome-compose Awesome Docker Compose samples awesome-compose 项目地址: https://gitcode.com/gh_mirrors/aw/awesome-compose

前言

在现代Web开发中,Django作为Python最流行的Web框架之一,常与PostgreSQL数据库搭配使用。而Docker Compose则是管理多容器应用的神器。本文将详细介绍如何使用Docker Compose快速搭建一个Django+PostgreSQL的开发环境。

环境准备

在开始之前,请确保你的系统已经安装了Docker和Docker Compose。本文假设读者已经具备基本的Docker知识。

项目结构规划

我们将创建一个包含以下核心文件的Django项目:

  1. Dockerfile - 定义Web服务容器的构建规则
  2. requirements.txt - 列出Python依赖包
  3. docker-compose.yml - 定义整个应用的服务编排
  4. 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的欢迎页面。

开发建议

  1. 开发服务器限制:Django自带的开发服务器不适合生产环境使用
  2. ALLOWED_HOSTS设置:开发时可设置为['*'],但生产环境必须指定具体域名
  3. 文件权限问题:在Linux系统下要注意生成文件的权限问题
  4. 数据库持久化:通过volume确保数据库数据不会丢失

服务管理

  • 查看运行中的容器:docker ps
  • 优雅停止服务:docker compose down
  • 强制停止服务:Ctrl+C

总结

通过Docker Compose,我们实现了:

  1. Django应用和PostgreSQL数据库的容器化
  2. 开发环境的快速搭建
  3. 代码修改后的实时更新
  4. 数据库数据的持久化存储

这种配置非常适合开发阶段使用,可以大大简化环境配置和团队协作的复杂度。对于生产环境,还需要考虑添加Gunicorn等WSGI服务器、Nginx反向代理等组件。

awesome-compose Awesome Docker Compose samples awesome-compose 项目地址: https://gitcode.com/gh_mirrors/aw/awesome-compose

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

常韵忆Imagine

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值