如何从本地开发机器部署到 Docker Swarm?

How to deploy to a Docker Swarm from a local dev machine?

我已经在我的本地网络上设置了一个 Docker Swarm,其中包含两个 VM(1 位经理,1 位工作人员)。在管理器节点中,我创建了一个私有注册表服务,我想将本地开发机器(不在 swarm 中)中的一些本地构建的镜像部署到该注册表。 Swarm 文档和我在 Internet 上阅读的许多示例似乎都没有超出基础知识,运行管理器节点内的命令,构建、标记和推送图像从管理器的本地缓存到注册中心同样的节点,我有一种不安的感觉,好像我的脸上缺少了一些东西。

我看到我的机器可以简单地作为管理器加入 swarm,拥有注册表。其他节点会自动接收更新,我的问题就会消失。但这对于生产集群设置有意义吗,一个服务于生产代码的节点集群,取决于我开发人员的家用机器 - 即使是非工人,仅限经理?

我尝试过的事情:

我是否应该 运行 管理器节点中的远程脚本到 git pull 我的代码,然后执行 build/push/docker 堆栈部署?

TL;DR 从 swarm 外部的本地开发机器将 image/app 部署到 Docker Swarm 的预期步骤是什么?这可能吗? Docker Swarm 支持吗?

在阅读了更多关于私有注册表和标签的内容后,我终于可以全神贯注于我的用例工作所需的标签。我的第一种方法只对了一半,但我不得不更改我的部署脚本以便:

  1. 从我的 docker-compose.yml 中提取 image 字段(格式为 localhost:5000/my_app:${MY_APP_VERSION-latest} ,以规避“没有这样的图像”错误)
  2. 创建用于推送到远程注册表的第二个标签,将“localhost”替换为我的管理器节点地址(注册表所在的位置)
  3. 用那个标签标记我本地构建的图像并docker-compose push
  4. 使用 docker --context <staging|production> stack deploy my_app
  5. 部署应用

我正在回答自己,因为我确实解决了我原来的问题,但很想看到类似场景的其他 DevOps 实现。