django - docker-compose - 数据库迁移和其他前/后脚本

标签 django docker docker-compose

我有一个示例 django 应用程序,我正在尝试使用 docker 启动并运行它。
docker-compose up调出 web、db 和其他容器以及它们之间的链接。但是有可能需要运行前脚本和后脚本。

我的场景中的前脚本示例:

git
pip
docker
docker-compose
wget

后脚本示例:

数据库迁移,通常使用 docker run web... 手动完成在容器启动并运行之后。

目前我在应用程序的根目录下有一个 deploy.sh,它遵循这样的逻辑..(我在启动时选择了一个 ubuntu 图像)
#assuming I always choose ubuntu base image
sudo apt-get install x
sudo apt-get install y
sudo apt-get install z
docker-compose build .; docker-compose up -d;
docker-compose run web "python manage.py makemigrations"

我的问题:

1)运行这些命令的最佳方式是什么?

2) 每次部署时是否都运行数据库迁移(从头开始?) - 或者这个问题是否由卷处理?

最佳答案

您有两个选择:

  • 您可以在 dockerfile 中为您的图像运行这些命令;当 compose 运行时,每个 dockerfile 都会运行 - 您的图像将具有这些命令的结果。这在您进行操作系统级升级和配置引导(如您的 apt-get 命令)时特别有用。
  • 对于运行时级别的配置(系统启动后你需要做的事情),使用 command docker-compose.yml 文件中的指令。这些将是您的迁移(如果您每次都需要运行它们)。

  • 如果你想在 docker compose 的运行中保存你的数据(也就是说,你的数据应该在你重新启动容器时保留);那么您需要针对您的主机的持久映射或共享的数据卷 - 您也可以在 docker-compose.yml 中进行配置。

    docker-compose 将很乐意运行您提供的任何脚本——它不知道是否需要运行它,它只是执行命令。由您来确保您的前、后、引导脚本足够智能,即使它们的有效结果已经应用,它们也可以重复。

    关于django - docker-compose - 数据库迁移和其他前/后脚本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31715239/

    相关文章:

    docker - 尝试在 ubuntu 中以远程用户身份运行 vs 代码开发容器时出现错误

    Azure 应用服务多容器(预览)NGINX connect() 失败 (111 : Connection refused) issue

    python - 是否可以在不使用 django 的身份验证和登录方法的情况下编写登录功能的代码?

    django - 如何在 django 的 CreateView 中使用上下文与类?

    Django 应用程序表在管理 UI 中不可见

    java - 如何在 Docker 容器中向 Tomcat 添加 SSL 证书?

    django - Django : search_device_list() missing 1 required positional argument: 'id'

    docker - 使用 GitHub Actions 设置 Docker 登录凭据助手

    远程 Docker 和 Intellij

    node.js - 将 React + Express 应用程序部署到 Kubernetes。如何用docker构建它?