docker构成 – 数据库迁移和其他前/后脚本

我有一个示例Django的应用程序,我想起床和运行使用docker。

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

我的scheme中的前脚本示例:

 git pip docker docker-compose wget 

后脚本的例子:

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

目前我有一个应用程序的根,这样按照逻辑的deploy.sh ..(我select启动时的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)数据库迁移是否每次部署(从头开始)?还是这个问题是由卷pipe理的?

你有两个select:

  1. 您可以在dockerfile中为图像运行这些命令; 因为每个dockerfile在compose运行的时候都会运行 – 你的图像将会有这些命令的结果。 当你进行操作系统级别的升级和configuration引导(比如你的apt-get命令)时,这是特别有用的。

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

如果你想跨Docker撰写持续你的数据(也就是说,当你重新启动容器时你的数据应该保留)。 那么您需要对主机进行永久映射或者共享数据卷 – 您也可以在docker-compose.yml中configuration该映射。

docker-compose会高兴地运行你提供的任何脚本 – 它不知道它是否需要运行它,它只是执行命令。 确保您的前置,后置引导脚本足够智能,即使已经应用了有效的结果,也可以重复这些脚本。