传输容器镜像
Rancher Desktop 提供 dockerd
和 containerd
容器引擎选项来管理容器。有时候,你可能希望将镜像从一个容器引擎环境传输到另一个容器引擎环境。你也可能已经从不同的容器管理应用程序迁移到 Rancher Desktop,并且希望将本地镜像从以前的应用程序环境带到 Rancher Desktop 环境中。本指南介绍了使用 save
和 load
命令传输镜像的步骤。
步骤
1. 将源环境的镜像保存为 tar 包。
- nerdctl
docker
保存单个镜像
nerdctl save -o local-image.tar image:tag
- 保存多个镜像
nerdctl save -o local-images.tar image1:tag1 image2:tag2
- 将所有镜像保存在命名空间中
下面两个命令使用 jq 进行 JSON 解析。长命令会执行以下步骤:
nerdctl -n k8s.io image ls
子命令会获取k8s.io
命名空间中所有镜像的列表,因此不包括其他命名空间的镜像(例如default
)。jq
子命令会过滤并格式化上一步获取的镜像列表。- 命令的
select(.Repository!=\"<none>\")
部分会跳过仓库值为<none>
的镜像。 - 根据镜像标签的值是否为
<none>
,命令的if (.Tag=="<none>") then .Repository else (.Repository+":"+.Tag) end')
部分会将镜像的名称格式化为<Repository>
或<Repository>:<Tag>
。
- 命令的
最后,命令的
nerdctl -n k8s.io save -o all-local-images-in-namespace.tar
部分会将前两步过滤和格式化的镜像列表保存到 tar 文件中。Bash
- PowerShell
nerdctl -n k8s.io save -o all-local-images-in-namespace.tar $(nerdctl -n k8s.io image ls --format '{{json .}}' | jq -r 'select(.Repository!="<none>") | if (.Tag=="<none>") then .Repository else (.Repository+":"+.Tag) end')
nerdctl -n k8s.io save -o all-local-images-in-namespace.tar $(nerdctl -n k8s.io image ls --format '{{json .}}' | jq -r 'select(.Repository!=\"<none>\") | if (.Tag==\"<none>\") then .Repository else (.Repository+\":\"+.Tag) end')
- 保存单个镜像
docker save -o local-image.tar image:tag
- 保存多个镜像
docker save -o local-images.tar image1:tag1 image2:tag2
- 保存所有本地镜像
下面两个命令使用 jq 进行 JSON 解析。长命令会执行以下步骤:
docker image ls
子命令会获取所有本地镜像的列表。jq
子命令会过滤并格式化上一步获取的镜像列表。- 命令的
select(.Repository!=\"<none>\")
部分会跳过仓库值为<none>
的镜像。 - 根据镜像标签的值是否为
<none>
,命令的if (.Tag=="<none>") then .Repository else (.Repository+":"+.Tag) end')
部分会将镜像的名称格式化为<Repository>
或<Repository>:<Tag>
。
- 命令的
最后,命令的
docker save -o all-local-images-in-namespace.tar
部分会将前两步过滤和格式化的镜像列表保存到 tar 文件中。Bash
- PowerShell
docker save -o all-local-images-in-namespace.tar $(docker image ls --format '{{json .}}' | jq -r 'select(.Repository!="<none>") | if (.Tag=="<none>") then .Repository else (.Repository+":"+.Tag) end')
docker save -o all-local-images-in-namespace.tar $(docker image ls --format '{{json .}}' | jq -r 'select(.Repository!=\"<none>\") | if (.Tag==\"<none>\") then .Repository else (.Repository+\":\"+.Tag) end')
2. 使用目标环境中保存的 tar 包加载镜像。
- nerdctl
- docker
nerdctl load < local-images.tar
docker load < local-images.tar
当前内容版权归 Rancher Desktop 或其关联方所有,如需对内容或内容相关联开源项目进行关注与资助,请访问 Rancher Desktop .