在研发运维阶段,经常会遇到镜像需要在不同的架构下运行,此时就需要制作多架构镜像。一般情况下镜像都是放在远程仓库中保存管理,但是有时候网络不通的情况下,只能够把镜像导出到移动介质中,方便转移携带。如果是单架构的镜像,直接使用docker save -o {fileName.tar} {imageName:tag}
命令即可导出,如果是多架构,docker
本身并不支持,这里介绍一个google的容器镜像工具skopeo
,可以很方便进行镜像的导入导出及其他镜像操作。
skopeo
开箱即用,安装了即可直接使用,对于镜像的同步、拉取、推送,只需要一条简单的命令即可,更方便的是,对于多架构镜像,如果使用docker save的话,往往会根据你的环境来单独导出对应的镜像,除非你在命令上加上–platform参数可以导出其他架构的,但是 docker save 命令本身不支持直接导出多架构镜像。skopeo
可以导出多架构镜像。skopeo
支持在远程仓库、本地文件、docker守护进程、OCI文件(Open Container Initiative)文件(一种标准化的容器镜像格式)之间进行同步加载,非常方便。
skopeo完整使用功能可以看我另一篇博客skopeo
安装skopeo参考官方文档skopeo安装
skopeo copy
// 从远程仓库导出镜像到本地OCI文件
skopeo copy --all docker://xxx/xxx:xx oci-archive:/usr/xxx.tar
//从本地OCI文件导入到远程仓库中
skopeo copy --all oci-archive:/usr/xxx.tar docker://xxx/xxx:xx
注意,多架构镜像的导入导出,只能使用oci格式文件,其他如docker-archive不支持,会有报错提示。
skopeo sync
skopeo sync --all --src docker://<source-repo>/<image-name>:<tag> --dest docker://<target-repo>/<image-name>:<tag>
skopeo copy和skopeo sync的区别
1. 功能概述
-
Skopeo Copy:
- 功能:用于将镜像从一个位置复制到另一个位置。支持多种源和目标存储类型,如 Docker Registry、本地文件系统、OCI 格式等。
- 特点:适用于单次复制操作,适合需要将单个镜像从一个位置移动到另一个位置的场景。
-
Skopeo Sync:
- 功能:用于同步镜像仓库中的镜像。支持从一个仓库同步到另一个仓库,或从仓库同步到本地目录,反之亦然。
- 特点:经过优化,能够更快地完成定期重新同步极少改动的大型存储库。适合需要定期同步多个镜像或整个仓库的场景。
2. 使用场景
-
Skopeo Copy:
- 适用场景:当你需要将单个镜像从一个位置复制到另一个位置时,例如从 Docker Hub 拉取镜像并保存到本地文件系统。
- 示例命令:
skopeo copy docker://docker.io/library/nginx:latest dir:/path/to/local/image
-
Skopeo Sync:
- 适用场景:当你需要同步整个仓库或多个镜像时,例如将 Docker Hub 上的某个仓库同步到本地目录,或从本地目录同步到私有仓库。
- 示例命令:
skopeo sync --src docker --dest dir docker.io/library/nginx /path/to/local/nginx
3. 性能优化
-
Skopeo Copy:
- 性能:适用于单次复制操作,性能表现稳定。
-
Skopeo Sync:
- 性能:经过优化,能够更快地完成定期重新同步极少改动的大型存储库。
4. 配置灵活性
-
Skopeo Copy:
- 配置:使用简单,直接指定源和目标即可。
-
Skopeo Sync:
- 配置:支持更复杂的配置,例如可以通过
config
文件指定同步的标记子集。
- 配置:支持更复杂的配置,例如可以通过
总结
- Skopeo Copy 适用于单次复制操作,适合需要将单个镜像从一个位置移动到另一个位置的场景。
- Skopeo Sync 适用于需要同步整个仓库或多个镜像的场景,经过优化,能够更快地完成定期重新同步极少改动的大型存储库。