在开发和部署前端项目时,经常需要使用到后端技术。而随着 Docker 技术的兴起,使用 Docker 部署后端服务变得越来越方便。本文将介绍如何使用 Docker 部署 Django + PostgreSQL + Redis。
准备工作
在开始部署之前,我们需要安装 Docker 和 Docker Compose。具体安装方式可参考官方文档。此外,我们还需要准备好 Django 项目和数据库、缓存的配置文件。
编写 Docker Compose 文件
接下来,我们需要编写 Docker Compose 文件。这里我们用到三个容器:Django、PostgreSQL 和 Redis。其中,Django 容器需要连接 PostgreSQL 和 Redis 容器。
一个简单的 Docker Compose 文件如下:
-- -------------------- ---- ------- -------- --- --------- ------- ------ - -------- ------- --------- --------- ------------ ------ - ----------- ----------- - -- - ----- -------- - ------ - ------------------ ------------ - ---------- - ---------------------------------------------------- - ---------------------------- --- ------ ----------- -------- ------ ------------ -------------- ---- ------------------ -------- ------------ ------ ------ ------ -------------- -------- ------ -------- -------
解读
version: '3'
:使用 Docker Compose 文件的版本号。services
:定义服务。django
:定义 Django 服务。build: .
:使用当前文件夹(Dockerfile 所在文件夹)作为构建上下文。command: python3 manage.py runserver 0.0.0.0:8000
:在容器中运行 Django 项目。ports: "8000:8000"
:将容器的 8000 端口映射到主机的 8000 端口。depends_on: db, redis
:表示 Django 服务需要连接 db 和 redis 服务。volumes: .:/app, static:/app/static
:将本地项目目录挂载到容器中,使容器中的代码随时与本地同步。environment: DEBUG=True, DATABASE_URL=postgres://user:password@db:5432/dbname, REDIS_URL=redis://redis:6379
:设置环境变量。
db
:定义 PostgreSQL 服务。image: postgres:11
:使用官方 PostgreSQL 11 镜像。restart: always
:容器启动失败时自动重启。environment: POSTGRES_USER, POSTGRES_PASSWORD, POSTGRES_DB
:设置环境变量。
redis
:定义 Redis 服务。image: redis:6-alpine
:使用官方 Redis 6 镜像。restart: always
:容器启动失败时自动重启。
volumes
:定义数据卷。
编写 Dockerfile 文件
接下来,我们需要编写 Django 容器的 Dockerfile 文件。一个简单的 Dockerfile 文件如下:
-- -------------------- ---- ------- ---- ---------------------- - ------ ------- ---- - --------------- ---- - ----- - -- --------- --- --- ------- --------- --- - -- --- ------- -- ---------------- - -- -- --- ------------ - - ------------- ------- --- ----- -- ------------- - -- ------------- --- -------------------
解读
FROM python:3.9-slim-buster
:使用 Python 3.9 slim 镜像作为基础镜像。WORKDIR /app
:设置工作目录为 /app。COPY . /app/
:将当前目录下的代码复制到容器中。RUN pip install --upgrade pip \ && pip install -r requirements.txt \ && rm -rf /root/.cache
:更新 pip,安装依赖,并清除缓存。RUN chmod +x entrypoint.sh
:给 entrypoint.sh 脚本加上可执行权限。CMD ["./entrypoint.sh"]
:运行 entrypoint.sh 脚本。
编写 entrypoint.sh 脚本
由于 Django 项目需要使用数据库,并且需要进行数据迁移等操作,我们需要编写 entrypoint.sh 脚本。一个简单的 entrypoint.sh 脚本如下:
-- -------------------- ---- ------- --------- - -- -------- -- ----- - -- -- -- ----- -- ----- --- ---- - ------ ------- --------- ------- - -- ------ -- ---- ----
解读
#!/bin/sh
:指定 Shell 解释器为 sh。while ! nc -z db 5432; do sleep 0.1; done
:等待数据库服务启动。python3 manage.py migrate
:执行数据迁移操作。exec "$@"
:启动 Django 项目。
使用 Docker 启动服务
完成以上编写工作后,我们就可以使用 Docker 启动服务了。
在终端中,进入项目根目录,输入以下命令:
docker-compose up -d
上述命令将会构建并启动所有容器。其中 -d
参数代表以守护进程(后台)模式运行。
接着,在浏览器中访问 http://localhost:8000
,即可看到 Django 项目的页面了。
总结
使用 Docker 部署 Django + PostgreSQL + Redis,可以让项目的部署变得更加便捷和可靠。在 Docker Compose 定义的文件中,我们可以设置容器的各种属性,如环境变量、端口映射、数据挂载等。通过编写 Dockerfile 和 entrypoint.sh 文件,我们可以自定义 Django 容器的构建和启动过程。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/6493e2c648841e98941767cc