Skopeo
Get Image Manifests
docker.io
bash
skopeo inspect --raw docker://fluent/fluent-bit:3.2.1
docker-hub.foobar.work
bash
skopeo inspect --raw docker://docker-hub.foobar.work/foobar-prod/fluent/fluent-bit:3.2.1
Manifest Example
json
{
"schemaVersion": 2,
"mediaType": "application/vnd.docker.distribution.manifest.list.v2+json",
"manifests": [
{
"mediaType": "application/vnd.docker.distribution.manifest.v2+json",
"digest": "sha256:8ac8842561ed20d93088461e278c9c020af0b90fdf866a50342bff459ae42b05",
"size": 4028,
"platform": {
"architecture": "amd64",
"os": "linux"
}
},
{
"mediaType": "application/vnd.docker.distribution.manifest.v2+json",
"digest": "sha256:1a96dc6ac0e21578ad5be472136bdb182c5109fabfc1993fce5e5c72c28930b4",
"size": 4028,
"platform": {
"architecture": "arm64",
"os": "linux"
}
},
{
"mediaType": "application/vnd.docker.distribution.manifest.v2+json",
"digest": "sha256:edc1062470700e6f603b9154fee22ad1d4f93ab366f7727c3ec554b6fb5499b0",
"size": 4028,
"platform": {
"architecture": "arm",
"os": "linux",
"variant": "v7"
}
},
{
"mediaType": "application/vnd.docker.distribution.manifest.v2+json",
"digest": "sha256:cd5956f4a07291f4f789b9fdbf6684a3e64ead8be4aa0c0c55075b0573451ddd",
"size": 4028,
"platform": {
"architecture": "s390x",
"os": "linux"
}
}
]
}
Copy Image
All Arch
Include manifest
.
bash
skopeo copy \
--all \
docker://otel/opentelemetry-collector-contrib:0.114.0 \
docker://docker-hub.foobar.work/foobar-prod/otel/opentelemetry-collector-contrib:0.114.0
bash
skopeo copy \
--all \
docker://fluent/fluent-bit:3.2.1 \
docker://docker-hub.foobar.work/foobar-prod/fluent/fluent-bit:3.2.1
bash
skopeo copy \
--all \
docker://opengauss/opengauss:5.0.0 \
docker://docker-hub.foobar.work/foobar-prod/opengauss/opengauss:5.0.0
Specify Arch
- Without
manifest
. - Specify
--override-arch
and--override-os
. - Need to create
manifest
manually bydocker
command.
bash
skopeo copy \
--override-arch amd64 \
--override-os linux \
docker://fluent/fluent-bit:3.2.1 \
docker://docker-hub.foobar.work/foobar-prod/fluent/fluent-bit:3.2.1-amd64
bash
skopeo copy \
--override-arch arm64 \
--override-os linux \
docker://fluent/fluent-bit:3.2.1 \
docker://docker-hub.foobar.work/foobar-prod/fluent/fluent-bit:3.2.1-arm64
Create Manifest
bash
docker manifest create \
docker-hub.foobar.work/foobar-prod/fluent/fluent-bit:3.2.1 \
docker-hub.foobar.work/foobar-prod/fluent/fluent-bit:3.2.1-amd64 \
docker-hub.foobar.work/foobar-prod/fluent/fluent-bit:3.2.1-arm64
Push Manifest
bash
docker manifest push docker-hub.foobar.work/foobar-prod/fluent/fluent-bit:3.2.1
Sync Image
skopeo copy
可以直接复制多架构镜像(Manifest List),而 skopeo sync
主要用于批量同步多个镜像,不适合处理单个镜像的多架构问题。
Pull Image
manifest-sha256
就是 manifest
对应架构里面的 hash
。
bash
[root@master-1 ~]# nerdctl pull docker-hub.foobar.work/foobar-prod/otel/opentelemetry-collector-contrib:0.113.0
docker-hub.foobar.work/foobar-prod/otel/opentelemetry-collector-contrib:0.113.0: resolved |++++++++++++++++++++++++++++++++++++++|
index-sha256:026bd68e5b1f646acd286fae257824f39629fe8b74df37b4c67d28f8ad8c4905: done |++++++++++++++++++++++++++++++++++++++|
manifest-sha256:ff3b385fc8a4bc7709e2bd8b4024259b649f78732aecc874a963250b5a5c3dd4: done |++++++++++++++++++++++++++++++++++++++|
config-sha256:1a1e862c66cbe5f9030bc2ca6a140544956e328f6d5a01d9c2a85f0f5cec0c08: done |++++++++++++++++++++++++++++++++++++++|
layer-sha256:d103c5d8a019a36affb49174cc41b986f37ba9d4ca1c10d728fb1d2d32165571: done |++++++++++++++++++++++++++++++++++++++|
layer-sha256:9301cae3282a7339612daab271d3b195732c5f667258b5ddbb2a5de53a57e7f4: done |++++++++++++++++++++++++++++++++++++++|
layer-sha256:5b28bf9d2d1200cf14a4380eb536cca62e348f3f2121a03b67eed22700064df5: done |++++++++++++++++++++++++++++++++++++++|
elapsed: 7.1 s total: 70.8 M (10.0 MiB/s)