【发布时间】:2021-03-26 02:22:40
【问题描述】:
我在本地网络上设置了一个由两个虚拟机组成的 Docker Swarm(1 个经理,1 个工作人员)。在管理器节点中,我创建了一个私有注册表服务,并且我想在我的本地开发机器(不在集群中)中部署一些本地构建的图像到该注册表。 Swarm 文档和我在互联网上阅读的数十个示例似乎并没有超出基础,在管理器节点内运行命令,构建、标记和推送管理器本地缓存中的图像到同一节点中的注册表,以及我有一种不安的感觉,我的脸上缺少了一些东西。
我发现我的机器可以简单地以管理员身份加入 swarm,拥有注册表。其他节点会自动接收更新,我的问题就会消失。但这对于生产群设置是否有意义,即服务生产代码的节点集群,取决于我的开发人员的家用机器 - 即使作为非工作人员,仅限管理人员?
我尝试过的事情:
- 将我的本地图像重新标记为
/my_app:1.0.0,然后是 docker-compose push。我可以看到这确实将图像推送到管理器的注册表,但服务无法启动消息“没有这样的图像:/my_app:1.0.0” - 创建一个上下文,然后在我的机器上运行
docker-compose --context my_context up --no-start。这(重新)在管理器节点的本地缓存中创建图像,然后我可以将其推送到注册表,但作为部署过程感觉非常笨拙。
我是否应该在管理器节点中运行远程脚本到git pull 我的代码,然后进行构建/推送/docker 堆栈部署?
TL;DR 从 swarm 外部的本地开发机器将图像/应用程序部署到 Docker Swarm 的预期步骤是什么?这可能吗? Docker Swarm 支持吗?
【问题讨论】:
-
您无需以管理员身份加入您的开发机器即可推送到本地 docker 注册表,只要您使用注册表凭据,以工作人员身份加入即可。现在,如果您希望拥有一个适当的“devops”环境,您的注册表实际上应该是第三台专用机器,具有适当的主机名和可见性(LAN 或 WAN)并且在 swarm 之外。不过,您的问题有点过于宽泛,并且很大程度上取决于您的用例的其他细节。
-
但是作为worker加入,我的机器不会成为接受经理任务的目标吗?当然,我可以通过标签/约束来防止这种情况,但是仅仅为了部署而增加的复杂性对我来说有点奇怪。我会在 swarm 之外的注册表上查找。谢谢!
标签: docker docker-swarm infrastructure