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

时间:2015-07-30 04:34:37

标签: django docker docker-compose

我有一个示例django应用程序,我正在尝试使用docker启动并运行。

docker-compose up调出web,db和其他容器以及它们之间的链接。但是可能需要运行前后脚本..

我的方案中的预脚本示例:

git
pip
docker
docker-compose
wget

后脚本示例:

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

目前我在app的根目录下有一个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)每次部署(从头开始?)都会运行数据库迁移 - 或者这个问题是由卷来处理的吗?

1 个答案:

答案 0 :(得分:3)

您有两种选择:

  1. 您可以在dockerfile中为您的图片运行这些命令;当compose运行时运行每个dockerfile - 您的图像将具有这些命令的结果。当您进行操作系统级升级和配置引导时(例如apt-get命令),这尤其有用。

  2. 对于运行时级配置(系统启动后需要执行的操作),请使用docker-compose.yml文件中的command指令。这些将是您的迁移(如果您每次都需要运行它们)。

  3. 如果要在docker compose运行期间保持数据的持续性(也就是说,重新启动容器时应保留数据);然后,您需要针对主机的持久映射或共享的数据卷 - 您也可以在docker-compose.yml中配置。

    docker-compose会愉快地运行你提供的任何脚本 - 它不知道它是否需要运行它,它只是执行命令。您可以确保您的pre,post,bootstrap脚本足够智能,即使已经应用了有效结果,也可以重复它们。