Docker Django 范例

Docker Django 范例

本文介绍如何使用 Docker Compose 部署 Django 应用。这是一个完整的示例,展示了如何将 Django 项目容器化。

📋 前置要求

  • Docker 20.10+ 已安装
  • Docker Compose V2 已安装(推荐)或 Docker Compose V1
  • Git 已安装

🚀 快速开始

1. 克隆项目

1
2
git clone https://github.com/noahzaozao/docker_django_demo.git
cd docker_django_demo

2. 构建镜像

使用 Docker Compose V2(推荐):

1
docker compose build

或使用旧版 Docker Compose:

1
docker-compose build

3. 启动服务

1
2
3
4
5
# 使用 Docker Compose V2
docker compose up -d

# 或使用旧版
docker-compose up -d

4. 收集静态文件

1
2
3
4
5
# 使用 Docker Compose V2
docker compose exec web python manage.py collectstatic --noinput

# 或使用旧版(需要先找到容器名称)
docker exec -i <container-name> bash -c 'python manage.py collectstatic --noinput'

5. 执行数据库迁移(如需要)

1
2
3
4
5
# 使用 Docker Compose V2
docker compose exec web python manage.py migrate

# 或使用旧版
docker exec -i <container-name> bash -c 'python manage.py migrate'

🛠️ 常用操作

查看运行状态

1
2
3
4
5
# 使用 Docker Compose V2
docker compose ps

# 或使用旧版
docker-compose ps

查看日志

1
2
3
4
5
# 使用 Docker Compose V2
docker compose logs -f web

# 或使用旧版
docker-compose logs -f web

进入容器

1
2
3
4
5
# 使用 Docker Compose V2
docker compose exec web bash

# 或使用旧版
docker-compose exec web bash

停止服务

1
2
3
4
5
# 使用 Docker Compose V2
docker compose stop

# 或使用旧版
docker-compose stop

停止并删除容器

1
2
3
4
5
6
# 使用 Docker Compose V2
docker compose down

# 或使用旧版
docker-compose stop
docker-compose rm -f

停止并删除容器、网络和卷

1
2
3
4
5
# 使用 Docker Compose V2(推荐,会清理所有资源)
docker compose down -v

# 或使用旧版
docker-compose down -v

🌐 访问应用

启动成功后,访问:

📝 Docker Compose 文件示例

典型的 Django 项目 docker-compose.yml 文件结构:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
version: '3.8'

services:
web:
build: .
command: python manage.py runserver 0.0.0.0:8000
volumes:
- .:/code
ports:
- "8080:8000"
depends_on:
- db
environment:
- DEBUG=1
- DATABASE_URL=postgresql://user:password@db:5432/dbname

db:
image: postgres:15
volumes:
- postgres_data:/var/lib/postgresql/data
environment:
- POSTGRES_DB=dbname
- POSTGRES_USER=user
- POSTGRES_PASSWORD=password

volumes:
postgres_data:

🔧 常见问题

1. 端口被占用

如果 8080 端口被占用,可以修改 docker-compose.yml 中的端口映射:

1
2
ports:
- "8081:8000" # 将 8081 映射到容器的 8000 端口

2. 权限问题

如果遇到权限问题,可以:

1
2
3
4
5
# 检查文件权限
ls -la

# 修改文件所有者
sudo chown -R $USER:$USER .

3. 数据库连接失败

确保数据库服务已启动:

1
2
docker compose ps
docker compose logs db

4. 静态文件无法加载

确保已执行 collectstatic 命令,并检查 STATIC_ROOTSTATIC_URL 配置。

📚 参考资源

0%