
Skopeo(スコピオ)は、コンテナイメージをレジストリ間でコピー・検査・署名するためのコマンドラインツールです。2016年にRed Hatのアントニオ・ムルダカ、ミロスラフ・トフカらが立ち上げ、同年9月にバージョン0.1.0が公開され、2018年5月にSkopeo 1.0として安定版に到達しました。Dockerデーモンを必要とせず、また対象のイメージをローカルにpullする必要すらないという特徴があり、skopeo copy docker://A docker://Bの一行でレジストリAからレジストリBへイメージを直接転送できます。名前はギリシャ語の「skopein(観察する)」に由来します。
この記事の目次
- コピー・検査・署名の三本柱
- atomic CLIから独立まで
- エアギャップ環境でのミラーリング
- docker pull/pushとの違い
- まとめ
コピー・検査・署名の三本柱

Skopeoができることは大きく分けて、イメージのコピー、検査、署名の3つです。skopeo copyはDockerやBuildahのpull→pushを介さずに、ソース側のマニフェストとレイヤーをターゲット側へ直接ストリーミング転送します。対応するソース/ターゲットにはdocker://(Docker互換レジストリ)、oci://(OCIレイアウト)、containers-storage:(ローカルストア)、dir:(ファイルシステム上のディレクトリ)、docker-archive:(docker saveのtar)など多彩な形式があり、相互変換も可能です。
skopeo inspect docker://registry.access.redhat.com/ubi9のように検査コマンドを使うと、イメージのlayer、digest、ラベル、アーキテクチャ、作成日時などをJSONで取得できます。署名関連では、skopeo standalone-sign/skopeo standalone-verifyでGPG署名を扱うほか、Sigstore(cosign)との連携で公開鍵不要の署名・検証フローもサポートしています。イメージのプロビナンス検証が重要視される現在、Skopeoはサプライチェーンセキュリティの基本ツールとして定着しています。
atomic CLIから独立まで

Skopeoの原型は、Red Hatが2014年〜2015年に開発していた「atomic」プロジェクトのコンテナ管理CLIにあります。atomic CLIは当時「Dockerデーモンに触らずにイメージを操作したい」という要求に応えるツールセットでしたが、そのうちレジストリ周りの操作部分を切り出して別プロジェクト化したのが2016年のSkopeoです。9月にバージョン0.1.0が公開され、年内には主要なpush/pull/inspect機能が揃いました。イメージ操作の標準ライブラリ「containers/image」とともに開発される形態で、Buildah・Podman・CRI-Oと共通の基盤を共有します。
2018年5月にSkopeo 1.0としてAPIが安定化し、Red Hatのコンテナエコシステムの一員として位置づけが固まりました。2020年以降はOCI Distribution Specへの追従、複数アーキテクチャ対応(manifest list / image index)の強化が進み、2022年にはSigstoreプロジェクトとの連携が組み込まれ、cosignで作成された署名をSkopeoで検証する流れが整備されました。現在はOpenShiftやKubernetes周辺で、イメージミラーリング、エアギャップ環境への配布、サプライチェーン検証の三役を担うツールとして使われています。
エアギャップ環境でのミラーリング

Skopeoが活躍する代表的なシーンが、インターネットに接続できないエアギャップ環境への配布です。公開側でskopeo copy --all docker://registry.redhat.io/ubi9 oci:./ubi9:9.4としてイメージをOCIレイアウトで取り出し、tarで物理メディアに保存して持ち込み、閉域側でskopeo copy --all oci:./ubi9:9.4 docker://internal.registry/ubi9:9.4として社内レジストリへ投入する手順が定番です。Dockerデーモンを稼働させる必要がないため、踏み台サーバの権限を最小化したまま運用できます。
--allフラグを付けると、マルチアーキテクチャ対応のイメージ(manifest list)も一括で複製されるため、x86_64/arm64の両方を扱う環境で重宝されます。署名情報も--preserve-digestsオプションでバイト単位の整合性を保ったまま転送でき、移送後の再検証で改ざんを検出できます。OpenShiftのoc mirrorコマンドや、ZarfといったKubernetes向けエアギャップ配布ツールの内部でもSkopeoが利用されており、閉域・分散インフラ向けの標準コンポーネントとして使われています。
docker pull/pushとの違い

Docker CLIのpull/pushとSkopeoの違いを一言でまとめると、「ローカルにイメージを置く必要があるかないか」です。docker pull→docker pushでイメージをミラーする場合、いったんローカルディスクに全レイヤーを展開する必要があり、ディスク容量と時間を消費します。Skopeoは中間ストレージを介さず、レジストリAから読み出した内容をレジストリBへ直接ストリーミングするため、数百MB〜数GBのイメージでも省ディスク・短時間でコピーできます。
またDocker CLIは基本的にDocker Image形式を前提とするのに対し、SkopeoはOCI形式・Dockerイメージ形式・containers-storage・ディレクトリ形式など多彩な入出力を平等に扱えます。Kubernetesクラスタ内のCIジョブからDockerデーモンを動かさずにレジストリ間ミラーを実行したい場合、あるいはマルチアーキテクチャイメージを変換しつつ転送したい場合などに、SkopeoはDocker CLIでは難しい仕事をシンプルに片付けてくれます。
まとめ
Skopeoは2016年にRed Hatが立ち上げ、2018年にv1.0を出したコンテナイメージ操作ツールです。デーモン不要・レジストリ間直送・署名検証一級という設計で、エアギャップ配布やサプライチェーンセキュリティの基盤として広く使われています。Podman・Buildah・CRI-Oと組み合わせて、Docker無しでもコンテナの全工程を回せるエコシステムの一翼を担っています。
※本記事はIT用語辞典の手書きドラフトです。公開前に最新情報・出典を確認のうえ加筆修正してください。

コメント