我有一个示例 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) 每次部署时是否都运行数据库迁移(从头开始?) - 或者这个问题是否由卷处理?
最佳答案
您有两个选择:
apt-get
命令)时特别有用。 command
docker-compose.yml 文件中的指令。这些将是您的迁移(如果您每次都需要运行它们)。 如果你想在 docker compose 的运行中保存你的数据(也就是说,你的数据应该在你重新启动容器时保留);那么您需要针对您的主机的持久映射或共享的数据卷 - 您也可以在 docker-compose.yml 中进行配置。
docker-compose 将很乐意运行您提供的任何脚本——它不知道是否需要运行它,它只是执行命令。由您来确保您的前、后、引导脚本足够智能,即使它们的有效结果已经应用,它们也可以重复。
关于django - docker-compose - 数据库迁移和其他前/后脚本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31715239/