当前位置: 首页 > 知识库问答 >
问题:

通过SSH推送Docker图像(分布式)

松桐
2023-03-14
docker push myimage ssh://myvps01.vpsprovider.net/

我没有掌握整个Docker Hub/Registry的原理。我知道我可以运行私有注册表,但为此我必须建立实际运行服务器的基础结构。

我偷偷地看了看Docker的内部工作(嗯,至少是文件系统),看起来Docker图像层只是一堆tarball,或多或少带有一些复杂的文件命名。我天真地认为,开发一个简单的Python脚本来执行分布式推/拉操作并不是不可能的,但我当然没有尝试过,所以这就是我提出这个问题的原因。

Docker不能像Git或Mercurial那样只做分布式(无服务器)推拉,有什么技术原因吗?

我认为这将是一个巨大的帮助,因为我可以把我在笔记本电脑上建立的映像直接推到应用服务器上,而不是先推到某个地方的回购服务器,然后从应用服务器上拉出来。或者我只是误解了这个概念,注册表是我绝对需要的一个非常重要的功能?

编辑一些上下文,希望解释我为什么要这样做,请考虑以下场景:

  • 在我的笔记本电脑上进行开发和测试(OSX,运行Docker机器,使用docker-compose定义服务和依赖项)
  • 通过脚本(自写、bash、很少依赖于dev计算机,基本上只依赖于Docker计算机)部署到活动环境
  • 部署到新的VPS,除了SSH访问和Docker后台进程之外,只有很少的依赖项。
  • 没有“永久”服务在任何地方运行,即我特别不想托管一个永久运行的注册表(特别是不能访问所有的VPS实例,尽管这可能通过一些巧妙的SSH隧道来解决)

当前最好的解决方案是使用Docker machine指向VPS服务器并重新构建它,但这会减慢部署速度,因为我每次都必须从源代码处构建容器。

共有1个答案

苏鸿志
2023-03-14

如果要将docker映像推送到给定的主机,docker中已经有了允许这样做的一切。下面的示例演示如何通过SSH推送docker映像:

docker save <my_image> | ssh -C user@my.remote.host.com docker load
  • docker save将生成一个docker图像(包括其层)的tar存档
  • -c用于ssh压缩数据流
  • docker load从tar存档创建docker映像

注意,docker registry+docker Pull命令的组合具有只下载缺少的层的优点。因此,如果经常更新docker映像(添加新层或修改最后几层),则docker Pull命令将比通过SSH推送完整的docker映像生成更少的网络流量。

 类似资料:
  • 我还不太了解dockerhub。我得到了以下案例: 我为中心标记了几张图片 docker标签myImageA myuser/myrepo: 1 docker标签myImageB myuser/myrepo: 1 docker标签myImageC myuser/myrepo: 1 然后我用docker push myuser/myrepo推送它们 现在,当删除所有本地图像并再次拉入自己的docker

  • 问题内容: 我正在尝试发送推送通知,我已在应用程序委托中进行了通知注册,并且apns设备令牌正在正确生成。我也已经在服务分机中编写了如下代码: 。并且json中的有效负载如下 我收到 标题 和 消息, 但是 图像 未显示。请指导如何在推送通知中获取图片 问题答案: 这行: 在userInfo字典中寻找作为对象子项的值。它正在寻找这个: 但是您的问题中的有效载荷是这样的: “数据”部分不存在,键也不

  • 如何通过Azure从我的UWP-App向不同设备上的应用程序的其他实例发送推送通知? 以下是注册设备以接收推送的说明。(这是可行的)第二部分是关于如何在控制台应用程序上发送推送(这也是可行的)https://azure.microsoft.com/en-us/documentation/articles/notification-hubs-windows-store-dotnet-get-star

  • 我有一个詹金斯在一个独立的视窗7服务器上。我们有一个请求添加一个构建作业来构建一个项目,该项目生成一个焦油球格式的Docker映像,并将该映像推送到驻留在OpenShift中的远程Docker注册表中。 试图找到一个詹金斯插件,可以做到这一点。发现Docker Common插件有一些命令,但据我所知,它只能将图像从Docker注册表推送到另一个注册表。 有没有指南可以让我通过独立的jenkins将

  • 问题内容: 我只想指出:我的互联网连接糟透了。因此,我开始推送新图像,情况如下所示: 同时推入所有这些层都只是在扼杀我的互联网连接,不允许我进行导航和码头工人抵制,因为其中许多层上载有错误,并一次又一次地重新启动。 有没有办法一次上传单个图层?(顺便说一句,不,请不要更改我的ISP或我的路由器) 问题答案: 在我的Ubuntu中,我添加了: 然后。像魅力一样工作。

  • 问题内容: 我已经创建了自己的docker文件(该文件运行一个显示“ helloworld”的shell脚本)。图像是“ hellodocker”,标签是“ mytag”,我现在拥有: 如何将Docker映像推送到dockerhub?我用。这给出了“无此类ID”错误。我想念什么?提前致谢。 问题答案: 您要么在构建时就将其标记为标签,例如 或创建绑定到同一图像的新标签,即