微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

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

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

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

我尝试过的事情:

  • 将我的本地映像重新标记/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 是否支持功能

解决方法

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

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

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。