通过Docker compose对链接到其他容器的Docker图像进行版本控制的策略
我有一个docker映像,其中包含许多服务。我一直在考虑使用Docker Compose来构建此图像,而不是将所有内容打包到一个大图像中 我遇到的问题是将更改应用到具有不同主映像版本的服务的策略。例如,其中一个服务是postgres数据库,有时模式可能会更改。当我部署单个单片映像时,我确切地知道当用户提取特定版本的映像时,将获得模式的哪个版本。我不确定如果我使用docker compose会发生什么。当用户启动新版本的my image时,它将始终使用干净的postgres容器启动,还是重复使用现有容器通过Docker compose对链接到其他容器的Docker图像进行版本控制的策略,docker,docker-compose,Docker,Docker Compose,我有一个docker映像,其中包含许多服务。我一直在考虑使用Docker Compose来构建此图像,而不是将所有内容打包到一个大图像中 我遇到的问题是将更改应用到具有不同主映像版本的服务的策略。例如,其中一个服务是postgres数据库,有时模式可能会更改。当我部署单个单片映像时,我确切地知道当用户提取特定版本的映像时,将获得模式的哪个版本。我不确定如果我使用docker compose会发生什么。当用户启动新版本的my image时,它将始终使用干净的postgres容器启动,还是重复使用现
我可以考虑重用有用的情况(例如,如果主机宕机,我不希望数据库丢失),但是如果他们提取一个新映像,我想确定他们得到一个干净的容器,并且我的主容器可以运行初始DDL/DML脚本来正确地准备它。这是一个合理的问题吗?来自以下文档: 默认情况下,如果存在服务的现有容器,docker compose up将停止并重新创建它们(使用中的卷保留已装入的卷),以便拾取docker-compose.yml中的更改。如果您不希望停止并重新创建容器,请使用docker compose up--no recreate。如果需要,这仍然会启动任何停止的容器 因此,要深入了解您的应用程序
- 当您希望更新图像并希望将数据库放入容器中以获取新容器时,请使用
命令docker compose up
- 使用
不会重新创建未更新的容器。当您想要更新但不需要重新创建所有辅助容器时,请使用它docker compose up--no recreate
- 在docker-compose.yml中的容器描述中放置
,将确保docker守护进程在容器停止时重新启动容器restart:always
--restart=always
。我注意到我可以为docker-compose.yml中的容器指定重新启动策略:因此我应该在docker-compose.yml中为其他服务容器指定restart:always
,或者我应该在调用docker up
的包装器脚本中指定--no recreate
?@fructdWithFormsDesigner我花费了我的答案。它回答了你的问题吗?是的,我想是的(我一定要玩弄它)。谢谢