docker - 如何从本地开发机器部署到 Docker Swarm?
问题描述
我已经在我的本地网络上建立了一个由两个 VM 组成的 Docker Swarm(1 个经理,1 个工人)。在管理器节点中,我创建了一个私有注册表服务,并且我想在我的本地开发机器(不在集群中)中部署一些本地构建的图像到该注册表。Swarm 文档和我在互联网上阅读的数十个示例似乎并没有超出基础,在管理器节点内运行命令,构建、标记和推送管理器本地缓存中的图像到同一节点的注册表,以及我有一种不安的感觉,我的脸上缺少了一些东西。
我看到我的机器可以简单地以管理员身份加入 swarm,拥有注册表。其他节点会自动接收更新,我的问题就会消失。但这对于生产群设置是否有意义,即服务生产代码的节点集群,取决于我的开发人员的家用机器 - 即使作为非工作人员,仅限管理人员?
我尝试过的事情:
- 将我的本地图像重新标记为 <my.node.manager.ip>/my_app:1.0.0,然后是
docker-compose push
. 我可以看到这确实将图像推送到管理器的注册表,但服务无法以消息“没有这样的图像:<my.node.manager.ip>/my_app:1.0.0”启动 - 创建一个上下文,然后在我的机器上运行
docker-compose --context my_context up --no-start
. 这(重新)在管理器节点的本地缓存中创建图像,然后我可以将其推送到注册表,但作为部署过程感觉非常笨拙。
我应该在管理器节点中对我的代码运行远程脚本,git pull
然后进行构建/推送/docker 堆栈部署吗?
TL;DR 从 swarm 外部的本地开发机器将图像/应用程序部署到 Docker Swarm 的预期步骤是什么?这可能吗?Docker Swarm 支持吗?
解决方案
在阅读了有关私有注册表和标签的更多内容之后,我终于可以围绕必要的标签进行思考,以使我的用例能够正常工作。我的第一种方法是正确的,但我不得不更改我的部署脚本,以便:
image
从我的 docker-compose.yml 中提取字段(格式为 localhost:5000/my_app:${MY_APP_VERSION-latest},以规避“没有这样的图像”错误)- 创建第二个标签用于推送到远程注册表,将“localhost”替换为我的管理器节点地址(注册表所在的位置)
- 用该标签标记我本地构建的
docker-compose push
图像 - 部署应用程序
docker --context <staging|production> stack deploy my_app
我在回答自己,因为我确实解决了我最初的问题,但希望看到类似场景的其他 DevOps 实现。
推荐阅读
- reactjs - 当我运行 npm run test 时,Jest 遇到了一个意外的令牌
- python - 通过python脚本更新mysql表
- python - 部署到谷歌云平台时遇到问题
- javascript - Jquery在按下按钮时为动画选择下一个eq(i + 1)
- react-native - 有没有一种方法可以隐藏多个文本输入组件在本机反应
- html - 如何使用 CSS 在圆形边框 HTML 表格的边缘添加额外的空间
- android - 如果启用文本选择,如何省略文本?
- python - 根据单独行中另一个列表的值打印一个列表中元素的索引,并为python中的缺失元素打印-1
- python - 如何解决导入袖扣错误“不推荐使用 plotly.plotly 模块”?
- c++ - 你能解释一下函数参数中的这个空指针吗?