[Docker] 使用 skopeo 快速將遠端 docker registry 映像檔複製到另一個 docker registry
之前需要從 AWS 的 ECR 複製到 Azure 的 ACR 時,
我都是先用 docker pull
把 ECR 的映像檔下載到本地機器,
再用 docker push
把映像檔上傳到 ACR,
整個過程又慢、又佔本地空間…
後來看到同事在討論相關問題時,看到了 skopeo 這個好物,
它可以在不需要安裝/啟動 docker 的狀態下,
就能複製遠端的兩個 docker registry,相當的方便~
1. 安裝 skopeo
在 Mac 上,可以用 Homebrew 安裝 skopeo:
brew install skopeo
看一下 skopeo 的可用參數:
$ skopeo --help Various operations with container images and container image registries Usage: skopeo [flags] skopeo [command] Available Commands: copy Copy an IMAGE-NAME from one location to another delete Delete image IMAGE-NAME help Help about any command inspect Inspect image IMAGE-NAME list-tags List tags in the transport/repository specified by the SOURCE-IMAGE login Login to a container registry logout Logout of a container registry manifest-digest Compute a manifest digest of a file standalone-sign Create a signature using local files standalone-verify Verify a signature using local files sync Synchronize one or more images from one location to another Flags: --command-timeout duration timeout for the command execution --debug enable debug output -h, --help help for skopeo --insecure-policy run the tool without any policy check --override-arch ARCH use ARCH instead of the architecture of the machine for choosing images --override-os OS use OS instead of the running OS for choosing images --override-variant VARIANT use VARIANT instead of the running architecture variant for choosing images --policy string Path to a trust policy file --registries.d DIR use registry configuration files in DIR (e.g. for container signature storage) --tmpdir string directory used to store temporary files -v, --version Version for Skopeo Use "skopeo [command] --help" for more information about a command.
2. 使用 skopeo 登入遠端 docker registry
如果遠端的 docker registry 是公開的 (public),自然可以不需登入。
但如果有私有的 (private),就得執行 skopeo login
,
基本上用法和 docker login
是一樣的:
$ skopeo login registry.test.com Username: test1 Password: Login Succeeded! $ skopeo login poc.azsacr.test.com Username: test2 Password: Login Succeeded!
3. 使用 skopeo 複製遠端 docker registry
在已經登入遠端 docker registry 的情況下,
就可以使用 skopeo copy
來進行複製了~
下面的例子是我想把 registry.test.com/app/audit-log:1.1.123 這個 docker image,
複製到 poc.azsacr.test.com/app/audit-log:1.1.123 時,
下的指令與執行結果:
$ skopeo copy docker://registry.test.com/app/audit-log:1.1.123 docker://poc.azsacr.test.com/app/audit-log:1.1.123 Getting image source signatures Copying blob c158987b0551 done Copying blob 859c8d0e9faf done ...... Writing manifest to image destination Storing signatures
執行的過程中不會把 docker image 複製到本地再上傳,
速度快很多,而且也不需要把 docker daemon 執行起來,
節省了不必要的 CPU 耗費~
真的是很方便的工具喔~
參考資料:Copy docker image between repositories
(本頁面已被瀏覽過 162 次)