如何将 Docker 映像复制到远程机器?

如何将 Docker 映像复制到远程机器?

我有一个已构建的 Docker 映像:

» docker images --no-trunc | grep discoball/nginx
discoball/nginx                 latest              623444f1777c        21 hours ago        126 MB

我想将其移动到远程服务器;docker save并且docker load似乎有命令能够将图像序列化为文件或从文件反序列化,这正是我所需要的。但是,我无法真正让它们工作。

我保存了图片:

» docker save discoball/nginx > nginx-latest.tar.gz

然后尝试在远程恢复它:

» cat nginx-latest.tar.gz | ssh "$IP" docker load

该命令执行成功。但是,docker images远程指示镜像未成功;相反,似乎仍存在旧版本:

» ssh "$IP" docker images --no-trunc | grep discoball/nginx
discoball/nginx        latest              2678dc27dd46        21 hours ago        126 MB

请注意,图像 ID 不同;我猜这是我的图像的旧版本。在服务器上搜索图像 ID 本身也不会产生任何结果:

» ssh "$IP" docker images --all | grep 623444
(last command returned 1.)
»

我究竟做错了什么?


所以现在我正在深入研究生成的.tar.gz文件;repositories其中的文件似乎表明远程机器是正确的:

» tar -xf nginx-latest.tar.gz -O repositories
{"discoball/nginx":{"latest":"2678dc27dd46469bc8692c2e5ad71b57ae573b1444531fcd1f76798638f84f5c"}}

这就是我在远程服务器上看到的数字。但为什么我把docker save这个数字写出来了,而不是623444f1777c?(docker 镜像 ID 不就是镜像和/或层的加密哈希吗?)如果远程服务器有相同的图像,为什么它有不同的图像 ID?(我现在不知道如何验证这一点,因为到目前为止,我会说“相同的图像”是“相同的图像 ID”……)

答案1

在本地机器上

docker save MYIMAGE:TAG -o myimage.tgz

复制myimage.tgz到远程机器,然后你就可以

docker load -i myimage.tgz

无论如何,传输Dockerfile及其工件并直接在远程服务器中构建新映像可能会更容易。无论哪种方式对您来说都更好。

相关内容