【问题标题】:How to deploy a LOCAL docker image on a REMOTE docker host machine?如何在远程 docker 主机上部署本地 docker 映像?
【发布时间】:2021-06-11 18:47:08
【问题描述】:

假设有两台 docker 主机 A 和 B,并且机器 A 上有一个 docker 映像 xyz。我想将它从机器 A 部署到机器 B。我该怎么做?

我知道可以通过如下设置 DOCKER_HOST 来远程操作容器,但这似乎要求机器 B 上已经存在 docker 映像 xyz。此外,从映像 xyz 创建一个 tar 文件并将其复制到机器B,然后在机器 B 上运行它是另一种方法。我想知道是否有一种方法可以直接从机器 A 进行操作?谢谢!

docker -H "ssh://my-user@machine-b" run -i -t xyz

【问题讨论】:

  • 最好的方法是将docker push镜像到某个注册表,然后远程机器可以docker pull它。不要不要尝试设置$DOCKER_HOST:它不会解决这个问题,而且它有一些重大的安全隐患(如果它没有完美地配置它会提供一个未经身份验证的网络路径通过机器不受限制的 root 访问)。
  • ssh://user@host 的语法 $DOCKER_HOST 与 ssh 连接一样安全。它没有人们看到的将 docker API 暴露给网络的问题。
  • 大卫,感谢您的及时回复。我对 ssh 没问题,因为我正在做实验测试,而不是生产测试。您的建议很好,但我想知道是否有更简单的方法。
  • BMitch,是的,使用“ssh://user@host”就可以了。谢谢。

标签: docker migration


【解决方案1】:

正如大卫所说,移动图像的标准方法是使用注册表。您可以自行托管(例如 Docker's registry)、使用 Hub 等 SaaS 产品或云供应商之一(例如 ECR、GCR)。与发送导出相比,注册表的优势在于对层进行了重复数据删除,当您的图像在版本之间只有微小的更改时,可以节省带宽。此功能也通过 push 和 pull 命令内置到 docker 引擎中。

使用 save 和 load 方法,您可以在两个命令中执行此操作,通过管道输出,但如前所述,即使您只有微小的更改,这也会传输所有层:

docker save ${image} | docker -H ssh://${user}@${host} load

【讨论】:

  • BMitch,我尝试了“docker save applications_xyz:us | gzip | DOCKER_HOST=ssh://bluestar@192.168.1.111 docker load”,它成功了。我想在 python 子进程中运行它,但它不起作用。这是我尝试过的, subprocess.call(["docker", "save", "applications_xyz:us", "|", "gzip", "|", "DOCKER_HOST=ssh://bluestar@192.168.1.111 ", "docker", "load"]),这是我收到的错误消息,“懦弱地拒绝保存到终端。使用 -o 标志或重定向。”你看这里有什么不对吗?谢谢。
  • @D.Wang | 是连接两个命令的shell 语法,而python 调用很可能是在没有shell 的情况下直接执行命令。可以打电话给["/bin/sh", "-c", "docker save... | docker load"]
猜你喜欢
  • 2017-04-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-10-11
  • 1970-01-01
相关资源
最近更新 更多