利用 Docker 进行 Django 项目的本地开发

技术栈

  • Docker & Docker-Compose
  • Python
  • Django
  • PostgreSQL

最终效果

编写 Dockerfile

这里的 Dockerfile 的作用就是简单的创立一个 Python 环境,并且为启动 Django 项目的测试服务器提供了默认参数(注意这里必须绑定 0.0.0.0 才能让其在外部可以访问)

1
2
3
4
5
6
7
8
FROM python:3.8

ENV PYTHONUNBUFFERED 1

RUN mkdir /www
WORKDIR /www

CMD pip install -r requirements.txt && python manage.py runserver 0.0.0.0:8080

编写 docker-compose.yml

docker-compose 文件做了以下事情

  • 从远端拉取 PostgreSQL 的容器,并设定了默认的服务器、账号、密码
  • 利用 Dockerfile 构建 Django 服务(这里因为我的 Dockerfile 命名为 Dockerfile-dev,因此需要指定 Dockerfile 的名称,如果是使用的 Dockerfile 文件名则不用)
  • 缓存了 python package 路径与数据库的数据
  • 将 Django 的 8080 和数据库的 5432 端口开放出来
  • 将本地目录暴露给 Django 容器
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
28
29
30
31
version: "3"
services:
db:
image: "postgres:9.5"
ports:
- "5432:5432"
volumes:
- db:/var/lib/postgresql/data
restart: always
environment:
POSTGRES_DB: database
POSTGRES_USER: user
POSTGRES_PASSWORD: password
web:
build:
context: .
dockerfile: Dockerfile-dev
ports:
- "8080:8080"
volumes:
- .:/www
- python-site-packages:/usr/local/lib/python3.8/site-packages/
depends_on:
- db
links:
- db
restart: always

volumes:
db:
python-site-packages:

尝试运行

直接使用 docker-compose -f 配置文件 up 尝试是否可以正常运行起容器(如果配置文件名为 docker-compose.ymldocker-compose.yaml 则可以省略 -f 配置文件 这一参数)

如果出现了问题,可以利用 docker-compose -f 配置文件 run web bash 进入至容器中

另外注意,代码内的连接数据库等应当使用 db 代替之前的 [localhost](http://localhost) 之类的数据库服务器路径

配置 PyCharm

进入项目的 Python Interpreter 设置,添加一个来源于 Docker Compose 的环境,将配置文件选为 docker_compose.yml 文件、服务选为 web,确定后即可享受代码补全等

而如果想要用 PyCharm 带的运行,则进入 Run Configurations,Host 设定为 0.0.0.0、Port 设定为 8080(与 docker_compose.yml 中暴露的相同),下面的解释器选择为刚刚添加的。

技术栈

  • Docker & Docker-Compose
  • Python
  • Django
  • PostgreSQL