使用 Docker 部署 Django + PostgreSQL + Redis

阅读时长 6 分钟读完

在开发和部署前端项目时,经常需要使用到后端技术。而随着 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 启动服务了。

在终端中,进入项目根目录,输入以下命令:

上述命令将会构建并启动所有容器。其中 -d 参数代表以守护进程(后台)模式运行。

接着,在浏览器中访问 http://localhost:8000,即可看到 Django 项目的页面了。

总结

使用 Docker 部署 Django + PostgreSQL + Redis,可以让项目的部署变得更加便捷和可靠。在 Docker Compose 定义的文件中,我们可以设置容器的各种属性,如环境变量、端口映射、数据挂载等。通过编写 Dockerfile 和 entrypoint.sh 文件,我们可以自定义 Django 容器的构建和启动过程。

来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/6493e2c648841e98941767cc

纠错
反馈