与其他版本链接的Docker镜像版本的策略包含通过docker撰写

我有一个包含许多服务的docker镜像。 我一直在考虑使用Docker Compose来构build这个映像,而不是将所有内容都打包在一个大的映像中。

我遇到的麻烦是用不同版本的主映像对服务进行更改的策略。 例如,其中一个服务是postgres数据库,有时架构可能会改变。 当我部署一个单一的整体图像时,我知道用户在拉取特定版本的图像时会得到什么版本的模式。 我不确定如果使用docker撰写会发生什么情况。 当用户启动我的图像的新版本时,它会始终以一个干净的postgres容器开始,还是将重新使用现有的容器?

我可以考虑重用的情况(比如主机停机,我不希望数据库丢失),但是如果他们拉出一个新的映像,我想确定他们是否有用得到一个干净的容器,并且我的主容器可以运行最初的DDL / DML脚本来准备好它。 这是一个有效的担忧吗?

从关于docker-compose up命令的文档中:

默认情况下,如果存在服务的现有容器,则docker-compose up将停止并重新创build它们(使用volume-from保留已安装的卷),以便docker-compose.yml中的更改被拾取。 如果你不想容器停止和重新创build,使用docker-compose up –no-recreate。 如果需要,这将仍然启动任何停止的容器。

所以要深入你的应用程序。

  • 当您想要更新图像时,使用docker-compose up命令,并且希望将数据库放入您的容器,以便放入新的容器。

  • 使用docker-compose up --no-recreate将不会重新创build未更新的容器。 当你想更新时使用它,但不需要重新创build所有辅助容器。

  • restart:always在docker-compose.yml中的容器描述中,将确保Docker守护程序在停止时重启容器。