レジストリを操作する - skopeo
ローカルに pull せずにレジストリ間でイメージをコピーしたり、マニフェストを検査したりできるツール。イメージの移送や署名検証に使われる。
概念図
構文
skopeo copy SRC DEST
skopeo inspect IMAGE_REF
skopeo sync --src SRC_TYPE --dest DEST_TYPE SRC DEST実例
リモートのイメージマニフェストを pull せずに閲覧する
skopeo inspect docker://docker.io/library/nginx:stableDocker Hub から自社レジストリへイメージをコピーする
skopeo copy docker://docker.io/library/alpine:3.19 docker://registry.example.com/alpine:3.19イメージを OCI アーカイブとしてファイルに保存する
skopeo copy docker://nginx:stable oci-archive:nginx-stable.tarSkopeo ができること
Skopeo は「ランタイムを起動せずにレジストリやイメージを操作する」ことに特化したツールです。
pull / run は Podman や Docker に任せ、Skopeo は検査 (inspect)、コピー (copy)、削除 (delete)、一括同期 (sync) を担います。
リリース前のマニフェスト確認、脆弱性スキャン前のメタデータ取得、オフライン環境へのイメージ移送などで使われます。
daemon 不要で、単一バイナリで動くため CI のステップに組み込みやすいのも強みです。
レジストリ間のイメージコピー
skopeo copy は送信元・送信先をそれぞれ docker://、oci://、oci-archive:、dir: といった transport で指定します。
ローカルにフルレイヤを展開せずストリーム的にコピーするため、巨大イメージでもディスクを浪費しません。
社内プロキシレジストリへのミラー、外部レジストリから隔離環境(air-gapped)への移送、タグ付け直しなどで活躍します。
--all を付ければマルチアーキテクチャのマニフェストリスト(amd64/arm64 など)をまとめてコピーでき、アーキテクチャごとのズレを防げます。
skopeo copy --all \
docker://docker.io/library/redis:7 \
docker://registry.internal.example.com/mirror/redis:7署名検証と cosign との違い
Skopeo は GPG ベースの署名(simple signing)を扱え、policy.json と組み合わせて「特定のレジストリのイメージは所定の鍵で署名されていなければ使わない」というポリシー適用が可能です。
Podman 側はこのポリシーを共有して pull 時に検証します。
一方 Sigstore の cosign は公開鍵基盤を前提とせず、短命な証明書と透明性ログ(Rekor)で署名を扱う方式です。
鍵管理が不要な keyless signing や、OCI Artifact としての署名保管など運用モデルが異なります。
既存の GPG 運用に乗せるなら Skopeo、クラウドネイティブで鍵管理を減らしたいなら cosign、という選択軸で整理できます。
