我有一个 docker compose (3) 文件,我正在对其进行操作docker stack deploy
。我在 Jenkins 管道中执行此操作。
我处理标签的方式是设置一个环境变量API_TAG
,相应的 docker compose 文件(的相关部分)如下所示。
version: '3'
services:
api:
image: registry:5000/api:${API_TAG}
我该如何处理该 stack / docker compose 文件中其他服务的标签(这些服务我还没有构建)?我处理的管道仅构建了一个 api 应用程序,而不是它所依赖的三个数据库。但是,这些数据库也有特定的标签(不仅仅是latest
)。我真的需要查询 swarm 集群以获取当前正在运行的服务和这些数据库的标签,这样就docker stack deploy
不会弄乱任何东西吗?
答案1
理想情况下,您的堆栈组合文件应该包含您作为该应用程序的容器运行的所有服务,所以是的,如果您有一个需要包含的数据库容器,它应该在组合文件中,并且您可以管理在该组合文件中运行的版本/标签。
这里的想法是,你可以设计一个撰写文件(或撰写文件和覆盖文件) 适用docker-compose up
于本地开发和docker stack deploy
群体部署。
另一种方法,但在我看来更复杂,是在它们的 compose/stack 文件中运行其他服务,并使用手动创建的覆盖网络来确保它们都在同一个 docker 虚拟网络上。