gpt4 book ai didi

ssh - 通过 SSH 推送 Docker 镜像(分布式)

转载 作者:IT老高 更新时间:2023-10-28 12:37:48 26 4
gpt4 key购买 nike

TL;DR基本上,我正在寻找这个:

docker push myimage ssh://myvps01.vpsprovider.net/

我无法理解整个 Docker Hub/Registry 背后的基本原理。我知道我可以运行私有(private)注册表,但为此我必须设置实际运行服务器的基础架构。

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

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

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

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

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

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

最佳答案

如果你想将 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 镜像更少的网络流量。

关于ssh - 通过 SSH 推送 Docker 镜像(分布式),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31575546/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com