如何在远程docker主机上部署本地docker镜像?

问题描述 投票:0回答:3

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

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

docker -H“ssh://my-user@machine-b”运行-i - t xyz

docker migration
3个回答
2
投票

正如 David 提到的,移动图像的标准方法是使用注册表。您可以自行托管(例如Docker 的注册表)、使用 Hub 等 SaaS 产品或云供应商之一(例如 ECR、GCR)。与发送导出相比,注册表的优点是对图层进行重复数据删除,当您的图像在版本之间仅发生微小变化时,可以节省带宽。此功能也通过推送和拉取命令内置于 docker 引擎中。

使用保存和加载方法,您可以用两个命令来完成此操作,通过管道传输输出,但正如之前提到的,即使您只有很小的更改,这也会传输所有层:

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

0
投票

我为此使用 Portainer Agent。在机器 A 上的端口 9000 或 9443 上本地设置 Portainer。然后在端口 8000 上使用 Portainer Agent 添加机器 B 环境。打开机器 B 环境。然后,您将能够从机器 A-> 机器 B 创建容器、拉取镜像、部署堆栈,无论您需要什么。这是迁移容器的好方法。


0
投票

正如 BMitch 提到的,您可以运行自己的注册表。 (详情请参阅上面的文档链接⬆️)

以下是在 Linux 上执行此操作的命令。这是开发用例的基本示例:

  • a 笔记本电脑(IP 192.168.0.22),您在其中进行编码(将托管注册表)
  • 和一个 vm (IP 192.168.0.55),您将在其中发布和运行 docker 容器。

⚠️以这种方式运行 docker 注册表是不安全,请阅读文档。

在 Ubuntu 22.04 上使用 docker 版本 24.0.6 进行测试


在您开发人员的笔记本电脑上

  1. 创建持久存储:
sudo mkdir /var/lib/my_docker_registry
  1. 启动一个registry容器:(这里监听端口5050
docker run -d -p 5050:5000 \
 --restart=always \
 -v /var/lib/my_docker_registry:/var/lib/registry \
 --name registry \
 registry:2
  1. 标记图像并将其推送到注册表中(本地主机可以从笔记本电脑访问它)
# grab a container or build your own
docker pull busybox

# tag it and push the image into the local registry
docker tag busybox:latest localhost:5050/mybusybox
docker push localhost:5050/mybusybox

vm

您必须知道笔记本电脑的本地IP(假设它们共享一个公共网络)。在本地 DHCP 上,IP 可能就足够了,并且租约可能始终相同。本地 DNS 条目也非常好。 (留给读者作为练习)

我们正在配置 vm docker 客户端以允许从本地远程不安全注册表中拉取:

以下命令将创建或覆盖 Linux docker 配置文件:(根据需要进行备份或编辑)

echo '{ "insecure-registries":["192.168.0.22:5050"] }' \
  | sudo tee /etc/docker/daemon.json

重新加载虚拟机的docker引擎:

sudo systemctl restart docker

测试从虚拟机的 docker pull

docker pull 192.168.0.22:5050/mybusybox

应该很高兴从注册表下载图像。


连同最初的问题:

在笔记本电脑方面:

export [email protected]
docker pull 192.168.0.22:5050/mybusybox

⚠️ 如果设置了

$DOCKER_HOST
,则在笔记本电脑终端会话中执行的所有 docker 命令现在都将在虚拟机上执行。 包括
docker build
,它将在虚拟机中构建容器,而不是在笔记本电脑上的本地 Docker 引擎上构建容器。 😁

当然,注册表可以托管在虚拟机上,或任何其他第三个远程位置。

享受远程调试的乐趣! 😜

© www.soinside.com 2019 - 2024. All rights reserved.