Dock Stay
レジストリを操作する - skopeo の使い方・オプション・サンプル

レジストリを操作する - skopeo

ローカルに pull せずにレジストリ間でイメージをコピーしたり、マニフェストを検査したりできるツール。イメージの移送や署名検証に使われる。

概念図

skopeo diagram

構文

bash
skopeo copy SRC DEST
skopeo inspect IMAGE_REF
skopeo sync --src SRC_TYPE --dest DEST_TYPE SRC DEST

実例

リモートのイメージマニフェストを pull せずに閲覧する

bash
skopeo inspect docker://docker.io/library/nginx:stable

Docker Hub から自社レジストリへイメージをコピーする

bash
skopeo copy docker://docker.io/library/alpine:3.19 docker://registry.example.com/alpine:3.19

イメージを OCI アーカイブとしてファイルに保存する

bash
skopeo copy docker://nginx:stable oci-archive:nginx-stable.tar

Skopeo ができること

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 など)をまとめてコピーでき、アーキテクチャごとのズレを防げます。

bash
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、という選択軸で整理できます。

関連トピック