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:
-
您可以在dockerfile中为图像运行这些命令; 因为每个dockerfile在compose运行的时候都会运行 – 你的图像将会有这些命令的结果。 当你进行操作系统级别的升级和configuration引导(比如你的
apt-get
命令)时,这是特别有用的。 -
对于运行时级configuration(系统启动后需要执行的操作),请使用docker-compose.yml文件中的
command
指令。 这些将是你的迁移(如果你需要每次运行它们)。
如果你想跨Docker撰写持续你的数据(也就是说,当你重新启动容器时你的数据应该保留)。 那么您需要对主机进行永久映射或者共享数据卷 – 您也可以在docker-compose.yml中configuration该映射。
docker-compose会高兴地运行你提供的任何脚本 – 它不知道它是否需要运行它,它只是执行命令。 确保您的前置,后置引导脚本足够智能,即使已经应用了有效的结果,也可以重复这些脚本。