1.多架构镜像 制作
这部分请参考:Docker Buildx 构建多系统镜像
2.多架构镜像 copy、sync和管理
2.1多架构场景下有多出了 manifests 和 manifests list
manifests
是镜像的描述清单,是在镜像的上层的又一种抽象,这个清单文件中也包含了有关于镜像的信息,如 layer层
、大小
和摘要信息
。
而 manifests list
就是在这个描述清单中有多种类型的 manifest
镜像描述信息,这个描述清单列表可以通过镜像 TAG
关联访问。
单架构manifest描述:
dongjiang@MacBook Pro:operator $ docker manifest inspect dongjiang1989/prometheus-operator:v0.60.3
{
"schemaVersion": 2,
"mediaType": "application/vnd.docker.distribution.manifest.v2+json",
"config": {
"mediaType": "application/vnd.docker.container.image.v1+json",
"size": 1770,
"digest": "sha256:5bcd0adc097560d0ffd8a7b55c82cad2d0e9e86a4546bae88f64730ea0cdbe85"
},
"layers": [
{
"mediaType": "application/vnd.docker.image.rootfs.diff.tar.gzip",
"size": 777659,
"digest": "sha256:9b231b23b5cdc7c22cc3c519df0e35876200ecd02e69978ab7dfc2fad43b384e"
},
{
"mediaType": "application/vnd.docker.image.rootfs.diff.tar.gzip",
"size": 487118,
"digest": "sha256:a1e445c9ea057d36599d14854b3d9b1be3087dd76916eab071f221c15147d66f"
},
{
"mediaType": "application/vnd.docker.image.rootfs.diff.tar.gzip",
"size": 30314085,
"digest": "sha256:6a771c3ba9618f4ecfd9f8939169765745a2b90786e0236d5d61a8813c36e88e"
}
]
}
多架构manifest描述: 带有platform
平台属性
dongjiang@MacBook Pro:operator $ docker manifest inspect dongjiang1989/metrics-server:v0.6.3
{
"schemaVersion": 2,
"mediaType": "application/vnd.docker.distribution.manifest.list.v2+json",
"manifests": [
{
"mediaType": "application/vnd.docker.distribution.manifest.v2+json",
"size": 2403,
"digest": "sha256:3e7fce61907e003ef8734cc6a39195228002d9b2d64c3fe3b7593f9d448ea133",
"platform": {
"architecture": "amd64",
"os": "linux"
}
},
{
"mediaType": "application/vnd.docker.distribution.manifest.v2+json",
"size": 2403,
"digest": "sha256:8ca8f4522045842eaf6961abc4c407954f6e471ee5f9e0ac6100198e02356626",
"platform": {
"architecture": "arm",
"os": "linux"
}
},
{
"mediaType": "application/vnd.docker.distribution.manifest.v2+json",
"size": 2403,
"digest": "sha256:2179355e2afe28c116b00e9b8e5c694753f6d1bb2538e17f5d6ad4cca39483f8",
"platform": {
"architecture": "arm64",
"os": "linux"
}
},
{
"mediaType": "application/vnd.docker.distribution.manifest.v2+json",
"size": 2403,
"digest": "sha256:6254c547b8da009366311b14d3339c45e84685ad1b6dfa09720212c2959efafa",
"platform": {
"architecture": "ppc64le",
"os": "linux"
}
},
{
"mediaType": "application/vnd.docker.distribution.manifest.v2+json",
"size": 2403,
"digest": "sha256:367d5a89b1d85fb98ded44618c17adb9e9655e69bed66608f8069f8ac8bf7cf2",
"platform": {
"architecture": "s390x",
"os": "linux"
}
}
]
}
2.2场景
很多场景下,需要将image重一个源搬移到另一个源,一个源搬移到本地目录; 并且这些image是多架构的情况下,如何将所有架构image全部搬移,是一个常见单比较困难的事情
2.2.1镜像搬运工 skopeo
skopeo
是一个命令行工具,用于对容器镜像
和镜像库
执行各种操作,支持使用 OCI 镜像
与原始的 Docker v2 镜像
。
可对容器镜像和容器存储进行操作。 在没有dockerd
的环境下,使用 skopeo
操作镜像是非常方便的。Skopeo
能够在容器注册表上检查存储库并获取图片层。
Inspect
命令获取存储库的清单,它能够向您显示关于整个存储库或标记的类似 docker inspect 的 json 输出。与 docker inspect 不同,这个工具可以帮助您在拉取存储库或标记之前(使用磁盘空间)收集有用的信息。Inspect 命令可以显示给定存储库可用的标记、图像的标签、图像的创建日期和操作系统等等。
2.3如何安装/使用
MacOS
安装:
$ brew install skopeo
Linux
或者其他设备上使用:(以容器方式运行
)
$ docker run --net=host quay.io/skopeo/stable:latest [commond]
其中 --net=host
是为了可以用上host dns
的域名解析; commond
就是具体的 skopeo 指令集合
2.4两个源之间同步单个镜像
举个例子: 将quay.io
的skopeo/stable:latest
镜像,所有多架构镜像,都同步到dockerhub
中的dongjiang1989/skopeo:latest
下
$ docker run --net=host quay.io/skopeo/stable:latest copy --debug --multi-arch all --dest-username ***** --dest-password ***** docker://quay.io/skopeo/stable:latest docker://docker.io/dongjiang1989/skopeo:latest
3.其他: skopeo 容器镜像工具使用
3.1skopeo支持类型
Skopeo 支持的镜像仓库类型:
- containers-storage
- dir
- docker://docker:Docker Registry HTTP API V2
- docker-archive:path[:docker-reference]:docker save 打包的镜像
- docker-daemon:docker-reference:本地的 docker 镜像
- oci:path:tag
支持的镜像格式:
- dir:/PATH
- docker://k8s.gcr.io/pause:3.2
- docker-daemon:alpine:latest
- docker-archive:alpine.tar
- oci:oci:alpine:latest
3.2镜像信息
dongjiang@MacBook Pro:k8s $ docker run quay.io/skopeo/stable:latest inspect docker://docker.io/dongjiang1989/skopeo:latest
{
"Name": "docker.io/dongjiang1989/skopeo",
"Digest": "sha256:8c16f1714a5b81408e0cbfdd2b09e86a925eb80408e49c4b60a98175cff1d287",
"RepoTags": [
"latest"
],
"Created": "2023-03-22T22:54:15.363694893Z",
"DockerVersion": "",
"Labels": {
"io.buildah.version": "1.29.1",
"license": "MIT",
"name": "fedora",
"org.opencontainers.image.created": "2023-03-22T22:23:09+00:00",
"org.opencontainers.image.revision": "b43ec279d2dc5deec07e7e9824a9e568dc068357",
"org.opencontainers.image.source": "https://github.com/containers/skopeo.git",
"org.opencontainers.image.version": "1.11.1",
"vendor": "Fedora Project",
"version": "37"
},
"Architecture": "arm64",
"Os": "linux",
"Layers": [
"sha256:753dd75b50994c9094ec429728f9ec15e1a8565b605b0b5128a4016c400b3d6a",
"sha256:670aa3005329891a7f4cb501bce4eeca8bd755441666815bbb97656871a00f2e",
"sha256:c3c8d4d507f2913cf890da57dd1bf1ac03ff7ef6bb4925ed55254adbbc5afe46",
"sha256:0da5822bda67ddcc31e093c4b5f04e82cf06d48cb975469a034341c1461951a9",
"sha256:b6697933df6d864ba840a5c9748d789795ec76f1943133f9f28a6a02f82f65a2"
],
"LayersData": [
{
"MIMEType": "application/vnd.oci.image.layer.v1.tar+gzip",
"Digest": "sha256:753dd75b50994c9094ec429728f9ec15e1a8565b605b0b5128a4016c400b3d6a",
"Size": 68882505,
"Annotations": null
},
{
"MIMEType": "application/vnd.oci.image.layer.v1.tar+gzip",
"Digest": "sha256:670aa3005329891a7f4cb501bce4eeca8bd755441666815bbb97656871a00f2e",
"Size": 22375091,
"Annotations": null
},
{
"MIMEType": "application/vnd.oci.image.layer.v1.tar+gzip",
"Digest": "sha256:c3c8d4d507f2913cf890da57dd1bf1ac03ff7ef6bb4925ed55254adbbc5afe46",
"Size": 1847,
"Annotations": null
},
{
"MIMEType": "application/vnd.oci.image.layer.v1.tar+gzip",
"Digest": "sha256:0da5822bda67ddcc31e093c4b5f04e82cf06d48cb975469a034341c1461951a9",
"Size": 4003,
"Annotations": null
},
{
"MIMEType": "application/vnd.oci.image.layer.v1.tar+gzip",
"Digest": "sha256:b6697933df6d864ba840a5c9748d789795ec76f1943133f9f28a6a02f82f65a2",
"Size": 227,
"Annotations": null
}
],
"Env": [
"DISTTAG=f37container",
"FGC=f37",
"container=oci",
"PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin",
"REGISTRY_AUTH_FILE=/tmp/auth.json"
]
}
其他能力
复制镜像
$ skopeo copy docker://quay.io/buildah/stable docker://registry.internal.company.com/buildah
$ skopeo copy oci:busybox_ocilayout:latest dir:existingemptydirectory
$ skopeo copy docker://ubuntu:20.04 dir:/root/ubuntu-20.04
$ skopeo copy docker://k8s.gcr.io/pause:3.2 docker://docker.io/gcmirrors/pause:3.2 --dest-authfile /root/.docker/config.json
删除镜像
$ skopeo delete docker://localhost:5000/imagename:latest
同步仓库
$ skopeo login --username USER myregistrydomain.com:5000
$ skopeo inspect --creds=testuser:testpassword docker://myregistrydomain.com:5000/busybox
$ skopeo copy --src-creds=testuser:testpassword docker://myregistrydomain.com:5000/private oci:local_oci_image
$ skopeo logout ...
「如果这篇文章对你有用,请随意打赏」
如果这篇文章对你有用,请随意打赏
使用微信扫描二维码完成支付