8.3. skopeo

skopeo コマンドを使用すれば、docker デーモンや docker コマンドを使用しなくても、レジストリーからコンテナーイメージを扱うことができます。レジストリーには、Docker レジストリー、独自のローカルレジストリー、Red Hat Quay、または OpenShift レジストリーを追加できます。skopeo で実行できることは次のとおりです。

  • 検証 - skopeo inspect コマンドの出力は、docker inspect コマンドで表示されるもの (コンテナーイメージに関する詳細な情報) と似ています。この出力は、json 形式 (デフォルト) または raw 形式 (--raw オプションを使用) の可能性があります。
  • コピー - skopeo copy を使用すると、コンテナーイメージをレジストリーから別のレジストリーまたはローカルディレクトリーにコピーできます。
  • レイヤー - skopeo layers コマンドを使用すると、イメージに関連付けられているレイヤーをダウンロードして、tarball および関連付けられているマニフェストファイルとしてローカルディレクトリーに保存できます。

コンテナーまたはイメージライブラリーに依存する buildah コマンドやその他のツールのように、skopeo コマンドは、Docker に関連付けられているもの以外のコンテナーストレージ領域からのイメージを処理できます。他のタイプのコンテナーストレージへの利用可能な変換には、コンテナーストレージ (buildah および CRI-O が保存するイメージ用)、ostree (アトミックおよびシステムコンテナー用)、oci (OCI 準拠のディレクトリーに格納されているコンテンツ用) などがあります。詳細は skopeo の man ページ を参照してください。

skopeo を試すには、ローカルレジストリーを設定してから、イメージレイヤーの検証、コピー、およびダウンロードを行うコマンドを実行します。この例に従う場合は、まず次の手順を実行します。

  • ローカルレジストリー(Red Hat Quay など) をインストールします。RHEL 7 の docker-distribution パッケージで利用可能なコンテナーレジストリーソフトウェアは、RHEL 8 では利用できません。
  • 最新の RHEL イメージをローカルシステム (podman pull ubi8/ubi) にプルします。
  • RHEL イメージのタグを再登録し、以下のようにローカルレジストリーにプッシュします。

    # podman tag ubi8/ubi localhost/myubi8
    # podman push localhost/myubi8

本セクションの残りの部分では、RHEL イメージからレイヤーを検証、コピー、および取得する方法を説明します。

注記

デフォルトでは、skopeo ツールは TLS 接続を必要とします。暗号化されていない接続を使用しようとすると失敗します。デフォルトを上書きして http レジストリーを使用するには、文字列 <registry>/<image> の前に http: と付けます。

8.3.1. skopeo でコンテナーイメージの検証

レジストリーからコンテナーイメージを検証する場合は、コンテナーの形式 (docker など)、レジストリーの場所 (docker.io、localhost など)、およびリポジトリー/イメージ (ubi8/ubi など) を指定する必要があります。

以下の例では、Docker レジストリーから mariadb コンテナーイメージを検証します。

# skopeo inspect docker://docker.io/library/mariadb
{
    "Name": "docker.io/library/mariadb",
    "Tag": "latest",
    "Digest": "sha256:d3f56b143b62690b400ef42e876e628eb5e488d2d0d2a35d6438a4aa841d89c4",
    "RepoTags": [
        "10.0.15",
        "10.0.16",
        "10.0.17",
        "10.0.19",
...
    "Created": "2018-06-10T01:53:48.812217692Z",
    "DockerVersion": "1.10.3",
    "Labels": {},
    "Architecture": "amd64",
    "Os": "linux",
    "Layers": [
...

タグ付けされた localhost/myubi8 を、ローカルシステムで実行しているコンテナーリポジトリーへプッシュしたとすると、次のコマンドでそのイメージを検証します。

# skopeo inspect docker://localhost/myubi8
{
    "Name": "localhost/myubi8",
    "Tag": "latest",
    "Digest": "sha256:4e09c308a9ddf56c0ff6e321d135136eb04152456f73786a16166ce7cba7c904",
    "RepoTags": [
        "latest"
    ],
    "Created": "2018-06-16T17:27:13Z",
    "DockerVersion": "1.7.0",
    "Labels": {
        "Architecture": "x86_64",
        "Authoritative_Registry": "registry.access.redhat.com",
        "BZComponent": "rhel-server-docker",
        "Build_Host": "rcm-img01.build.eng.bos.redhat.com",
        "Name": "myubi8",
        "Release": "75",
        "Vendor": "Red Hat, Inc.",
        "Version": "8.0"
    },
    "Architecture": "amd64",
    "Os": "linux",
    "Layers": [
        "sha256:16dc1f96e3a1bb628be2e00518fec2bb97bd5933859de592a00e2eb7774b6ecf"
    ]
}

8.3.2. skopeo でコンテナーイメージのコピー

このコマンドは、myubi8 コンテナーイメージを、ローカルレジストリーからローカルシステムのディレクトリーにコピーします。

# skopeo copy docker://localhost/myubi8 dir:/root/test/
INFO[0000] Downloading myubi8/blobs/sha256:16dc1f96e3a1bb628be2e00518fec2bb97bd5933859de592a00e2eb7774b6ecf
# ls /root/test
16dc1f96e3a1bb628be2e00518fec2bb97bd5933859de592a00e2eb7774b6ecf.tar manifest.json

skopeo copy コマンドの結果は、指定したディレクトリーへコピーするイメージを表す tarball (16d*.tar) と manifest.json です。レイヤーが複数になる場合は、tarball も複数になります。skopeo copy コマンドは、別のレジストリーにイメージをコピーすることもできます。宛先レジストリーに書き込むのに使用する署名を提供する必要がある場合は、コマンドラインに --sign-by= オプションを追加し、その後に必要な key-id を追加します。

8.3.3. skopeo でイメージレイヤーの取得

skopeo layers コマンドは、skopeo copy に似ており、相違点は、copy オプションはイメージを別のレジストリーまたはローカルディレクトリーにコピーできますが、layers オプションは現在のディレクトリーにあるレイヤー (tarball ファイルおよび manifest.json ファイル) を削除するだけとなります。以下に例を示します。

# skopeo layers docker://localhost/myubi8
INFO[0000] Downloading myubi8/blobs/sha256:16dc1f96e3a1bb628be2e00518fec2bb97bd5933859de592a00e2eb7774b6ecf
# find .
./layers-myubi8-latest-698503105
./layers-myubi-latest-698503105/manifest.json
./layers-myubi8-latest-698503105/16dc1f96e3a1bb628be2e00518fec2bb97bd5933859de592a00e2eb7774b6ecf.tar

この例では、新しいディレクトリー (layers-myubi8-latest-698503105) を作成し、このケースでは 1 つのレイヤーの tarball と manifest.json ファイルがそのディレクトリーにコピーされます。


このページには機械翻訳が使用されている場合があります (詳細はこちら)。