首页 > 解决方案 > 如何从本地开发机器部署到 Docker Swarm?

问题描述

我已经在我的本地网络上建立了一个由两个 VM 组成的 Docker Swarm(1 个经理,1 个工人)。在管理器节点中,我创建了一个私有注册表服务,并且我想在我的本地开发机器(不在集群中)中部署一些本地构建的图像到该注册表。Swarm 文档和我在互联网上阅读的数十个示例似乎并没有超出基础,在管理器节点内运行命令,构建、标记和推送管理器本地缓存中的图像到同一节点的注册表,以及我有一种不安的感觉,我的脸上缺少了一些东西。

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

我尝试过的事情:

我应该在管理器节点中对我的代码运行远程脚本,git pull然后进行构建/推送/docker 堆栈部署吗?

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

标签: dockerdocker-swarminfrastructure

解决方案


在阅读了有关私有注册表和标签的更多内容之后,我终于可以围绕必要的标签进行思考,以使我的用例能够正常工作。我的第一种方法是正确的,但我不得不更改我的部署脚本,以便:

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

我在回答自己,因为我确实解决了我最初的问题,但希望看到类似场景的其他 DevOps 实现。


推荐阅读