在 MacOS/Windows 上运行的 Docker 或 Podman 客户端可以使用远程服务器来构建/运行容器吗?

在 MacOS/Windows 上运行的 Docker 或 Podman 客户端可以使用远程服务器来构建/运行容器吗?

以 MacOS 和 Windows 作为客户端,我希望能够在我的网络(本地或公共)上有一个地址来处理容器构建步骤并运行容器。

因此,当我运行以下命令时,它会在我的远程机器上执行,但似乎在本地运行

docker build .
docker run -v .:/app -p 9000:9000 foo:latest

我希望我可以使用类似瘦客户端的笔记本电脑来编写代码,同时代码在远程编译和执行 - 这样我就可以利用更大的存储空间来缓存图像,加快计算速度,共享处理能力,这样我就可以集中硬件成本以获得最大效果。

此外,当我不可避免地回到办公室时,我可以将工作转移到家里的台式机上,同时在办公室使用轻便的便携式笔记本电脑。

我不关心桌面 GUI,也不介意它是 Podman 还是 Docker。

这样的设置是否可行,或者我最好使用ssh隧道端口并使用保险丝 ssh-fs 实现?

答案1

直接从命令行,你可以使用 Docker 执行以下操作:

DOCKER_HOST=ssh://user@host docker build -t image:tag .

为了节省一些输入,您可以设置上下文来保存远程主机:

docker context create remote --docker "host=ssh://user@host"

然后使用该远程上下文:

docker -c remote build -t image:tag .

如果你想运行该上下文中的所有命令,那么:

# switch to the remote context for all future commands
docker context use remote
# and to revert back to the default local context
docker context use default

这与构建配合得很好,因为构建上下文被发送到远程服务器,所以没有本地文件系统挂载。

但是,一旦您开始运行容器,事情就会变得更加复杂。所有侦听端口都将位于远程主机上,卷挂载将位于远程主机文件系统上。如果您需要这些功能,那么隧道端口和 ssh-fs 可能是更好的选择。我想到的另一个选项是 IDE 中的远程插件,它通过 ssh 在远程主机上进行所有代码更改,因此即使不是本地开发,也会感觉像是在本地进行。

相关内容