我容纳了一个具有容器依赖关系的Web应用程序。
这里的容器按其依赖顺序列出,后者依赖于前者。
有一个mysql容器可以编译mysql,安装它并进行配置。
有一个learnintouch容器可以将文件和种子定制产品数据安装到mysql容器中。
有一个learnintouch.com容器可以将文件和种子自定义网站数据安装到mysql容器中。
数据播种是应用程序安装的一部分,只需在应用程序生命周期内完成一次。
数据播种时间很长,实际上非常长。
通过位于learnintouch.com目录中的docker-compose.yml文件创建和启动应用程序会很不错。
首先,我希望只有三个容器,所有依赖项,每个依赖容器等待其依赖关系完成其数据种子,然后运行自己,最后启动应用程序。
我现在看到,即使不是不可能,也很难实现。让docker-compose等待服务启动已经很棘手了,但检查数据播种是否已经完成更是如此。
我认为一种方法是在容器依赖树中有两个分支,一个用于执行数据种子设定的应用程序安装,另一个用于启动应用程序。
这是一种常见做法吗?
答案 0 :(得分:0)
最佳做法是删除依赖项,以便容器可以按任何顺序启动。如果一个容器在它使用的另一个容器之前启动,它应该优雅地返回错误,如果您尝试使用它,但一旦依赖关系联机就开始工作。这允许独立升级,替换或迁移各种微服务,而无需重新启动整个基础架构。
当那是不可能的时候,要意识到docker-compose很擅长它的功能,但它的作用范围有限。因此,您需要使用自己的脚本扩展它。所以你可能有几个撰写文件,第一个文件将被运行以播种数据直到它完成,然后当它返回时脚本将继续到你启动其他容器的位置。
最后,对于大型数据结构,最好将其作为外部卷进行管理,您可以独立于其他容器创建,更新和备份。