docker manifest

説明

Docker イメージ・マニフェストとマニフェスト一覧を管理します。

重要

これは Docker クライアントの実験的なコマンドです。

プロダクション環境では使うべきではありません。 Docker CLI で実験的機能を有効かするには、 config.json を編集し、 experimentalenabled にします。

使い方

$ docker manifest COMMAND COMMAND

補足説明

docker manifest コマンドは、これ自身は何ら処理を行いません。マニフェストやマニフェストリストを操作するため、何らかのサブコマンドの指定が必要です。

マニフェストとは、レイヤ、容量、ダイジェスト値といったイメージに関する情報です。docker manifest コマンドでは、イメージが構築された OS とアーキテクチャのような追加情報も与えられます。

マニフェストリストとは、指定した1つまたは複数の(理想は2つ以上の)イメージ名によって作成されたイメージのリストです。これらは、たとえば docker pulldocker run コマンドでのイメージ名と同様に扱えます。

理想としては、異なる os とアーキテクチャの組み合わせごとに独立したイメージを作成し、そこからマニフェストリストを作成します。そのため、マニフェストリストは「 複数アーキテクチャ対応イメージ(multi-arch image) 」として言及されます。一方で、ユーザはマニフェストリストを2つのイメージを指すのに使うでしょう。1つは amd64 上の Windows で、もう1つは arm64 上の darwin です。

manifest inspect

$ docker manifest inspect --help

Usage:  docker manifest inspect [OPTIONS] [MANIFEST_LIST] MANIFEST

Display an image manifest, or manifest list

Options:
      --help       Print usage
      --insecure   Allow communication with an insecure registry
  -v, --verbose    Output additional info including layers and platform

manifest create

Usage:  docker manifest create MANIFEST_LIST MANIFEST [MANIFEST...]

Create a local manifest list for annotating and pushing to a registry

Options:
  -a, --amend      Amend an existing manifest list
      --insecure   Allow communication with an insecure registry
      --help       Print usage

manifest annotate

Usage:  docker manifest annotate [OPTIONS] MANIFEST_LIST MANIFEST

Add additional information to a local image manifest

Options:
      --arch string               Set architecture
      --help                      Print usage
      --os string                 Set operating system
      --os-version string         Set operating system version
      --os-features stringSlice   Set operating system feature
      --variant string            Set architecture variant

manifest push

Usage:  docker manifest push [OPTIONS] MANIFEST_LIST

Push a manifest list to a repository

Options:
      --help       Print usage
      --insecure   Allow push to an insecure registry
  -p, --purge      Remove the local manifest list after push

安全ではないレジストリで使う

manifest コマンドは Docker レジストリのみ通信します。そのため、engine の許可された安全ではないレジストリに一覧を確認する方法がありません。CLI が安全ではないレジストリとやりとり可能にするには、 docker manifest コマンドに --insecure フラグを付けます。 create のような処理ごとに、レジストリに問い合わせるには、 --insecure フラグが必須です。このフラグを CLI に伝えると、証明書が無かったり自己署名する場合でも、セキュリティの警告を無視します。同様に、安全ではないレジストリに manifest push する場合も --insecure フラグが必須です。安全ではないレジストリに対して指定しなければ、manifest コマンドはデフォルトで接続を必要とするレジストリが見つけられません。

コマンドの使用例は、以下の 使用例のセクション をご覧ください。

使用例

イメージのマニフェスト・オブジェクトを調査

$ docker manifest inspect hello-world
{
        "schemaVersion": 2,
        "mediaType": "application/vnd.docker.distribution.manifest.v2+json",
        "config": {
                "mediaType": "application/vnd.docker.container.image.v1+json",
                "size": 1520,
                "digest": "sha256:1815c82652c03bfd8644afda26fb184f2ed891d921b20a0703b46768f9755c57"
        },
        "layers": [
                {
                        "mediaType": "application/vnd.docker.image.rootfs.diff.tar.gzip",
                        "size": 972,
                        "digest": "sha256:b04784fba78d739b526e27edc02a5a8cd07b1052e9283f5fc155828f4b614c28"
                }
        ]
}

イメージのマニフェストを調査し、os とアーキテクチャ情報を取得

docker manifest inspect コマンドは、オプションで --verbose フラグを指定でき、イメージ名(参照)、アーキテクチャと OS (プラットフォーム)の情報を表示します。

他の docker コマンドでイメージを扱うのと同様に、参照はイメージ名や、タグが不要であったり、あるいはダイジェスト値(例: hello-world@sha256:f3b3b28a45160805bb16542c9531888519430e9e6d6ffc09d72261b0d26ff74f )が使えます。

こちらはイメージのマニフェストを --verbose フラグを付けて調査する例です。

$ docker manifest inspect --verbose hello-world
{
        "Ref": "docker.io/library/hello-world:latest",
        "Digest": "sha256:f3b3b28a45160805bb16542c9531888519430e9e6d6ffc09d72261b0d26ff74f",
        "SchemaV2Manifest": {
                "schemaVersion": 2,
                "mediaType": "application/vnd.docker.distribution.manifest.v2+json",
                "config": {
                        "mediaType": "application/vnd.docker.container.image.v1+json",
                        "size": 1520,
                        "digest": "sha256:1815c82652c03bfd8644afda26fb184f2ed891d921b20a0703b46768f9755c57"
                },
                "layers": [
                        {
                                "mediaType": "application/vnd.docker.image.rootfs.diff.tar.gzip",
                                "size": 972,
                                "digest": "sha256:b04784fba78d739b526e27edc02a5a8cd07b1052e9283f5fc155828f4b614c28"
                        }
                ]
        },
        "Platform": {
                "architecture": "amd64",
                "os": "linux"
        }
}

マニフェストリストの作成と送信

マニフェストリストを作成するには、まず、マニフェストリストの構成に含めようとしているイメージを、ローカルのマニフェストリストとして作成します。これはレジストリに送信しますので、 docker レジストリ以外のレジストリに送信したい場合は、自身のレジストリ名と IP アドレスとポートを持つマニフェストリストの作成が必要です。これあ、外部レジストリに対してイメージを送信する時、タグを付けるのと同じようなものです。

マニフェストリストのローカルコピーを作成後、オプションで annotate (注釈の追加)できます。注釈では、アーキテクチャ、オペレーティングシステム(現在のイメージの値を上書き)、OS 機能、派生アーキテクチャを追記できます。

最後に、希望するレジストリに対してマニフェストリストを push します。以下に記述する3つのコマンドは、一連のの処理例です。

$ docker manifest create 45.55.81.106:5000/coolapp:v1 \
    45.55.81.106:5000/coolapp-ppc64le-linux:v1 \
    45.55.81.106:5000/coolapp-arm-linux:v1 \
    45.55.81.106:5000/coolapp-amd64-linux:v1 \
    45.55.81.106:5000/coolapp-amd64-windows:v1

Created manifest list 45.55.81.106:5000/coolapp:v1
$ docker manifest annotate 45.55.81.106:5000/coolapp:v1 45.55.81.106:5000/coolapp-arm-linux --arch arm
$ docker manifest push 45.55.81.106:5000/coolapp:v1
Pushed manifest 45.55.81.106:5000/coolapp@sha256:9701edc932223a66e49dd6c894a11db8c2cf4eccd1414f1ec105a623bf16b426 with digest: sha256:f67dcc5fc786f04f0743abfe0ee5dae9bd8caf8efa6c8144f7f2a43889dc513b
Pushed manifest 45.55.81.106:5000/coolapp@sha256:f3b3b28a45160805bb16542c9531888519430e9e6d6ffc09d72261b0d26ff74f with digest: sha256:b64ca0b60356a30971f098c92200b1271257f100a55b351e6bbe985638352f3a
Pushed manifest 45.55.81.106:5000/coolapp@sha256:39dc41c658cf25f33681a41310372f02728925a54aac3598310bfb1770615fc9 with digest: sha256:df436846483aff62bad830b730a0d3b77731bcf98ba5e470a8bbb8e9e346e4e8
Pushed manifest 45.55.81.106:5000/coolapp@sha256:f91b1145cd4ac800b28122313ae9e88ac340bb3f1e3a4cd3e59a3648650f3275 with digest: sha256:5bb8e50aa2edd408bdf3ddf61efb7338ff34a07b762992c9432f1c02fc0e5e62
sha256:050b213d49d7673ba35014f21454c573dcbec75254a08f4a7c34f66a47c06aba

マニフェストリストの調査

$ docker manifest inspect coolapp:v1
{
   "schemaVersion": 2,
   "mediaType": "application/vnd.docker.distribution.manifest.list.v2+json",
   "manifests": [
      {
         "mediaType": "application/vnd.docker.distribution.manifest.v2+json",
         "size": 424,
         "digest": "sha256:f67dcc5fc786f04f0743abfe0ee5dae9bd8caf8efa6c8144f7f2a43889dc513b",
         "platform": {
            "architecture": "arm",
            "os": "linux"
         }
      },
      {
         "mediaType": "application/vnd.docker.distribution.manifest.v2+json",
         "size": 424,
         "digest": "sha256:b64ca0b60356a30971f098c92200b1271257f100a55b351e6bbe985638352f3a",
         "platform": {
            "architecture": "amd64",
            "os": "linux"
         }
      },
      {
         "mediaType": "application/vnd.docker.distribution.manifest.v2+json",
         "size": 425,
         "digest": "sha256:df436846483aff62bad830b730a0d3b77731bcf98ba5e470a8bbb8e9e346e4e8",
         "platform": {
            "architecture": "ppc64le",
            "os": "linux"
         }
      },
      {
         "mediaType": "application/vnd.docker.distribution.manifest.v2+json",
         "size": 425,
         "digest": "sha256:5bb8e50aa2edd408bdf3ddf61efb7338ff34a07b762992c9432f1c02fc0e5e62",
         "platform": {
            "architecture": "s390x",
            "os": "linux"
         }
      }
   ]
}

安全ではないレジストリに送信

以下の例は、マニフェストリストを作成、知っている安全ではないレジストリに対して送信します。

$ docker manifest create --insecure myprivateregistry.mycompany.com/repo/image:1.0 \
    myprivateregistry.mycompany.com/repo/image-linux-ppc64le:1.0 \
    myprivateregistry.mycompany.com/repo/image-linux-s390x:1.0 \
    myprivateregistry.mycompany.com/repo/image-linux-arm:1.0 \
    myprivateregistry.mycompany.com/repo/image-linux-armhf:1.0 \
    myprivateregistry.mycompany.com/repo/image-windows-amd64:1.0 \
    myprivateregistry.mycompany.com/repo/image-linux-amd64:1.0

$ docker manifest push --insecure myprivateregistry.mycompany.com/repo/image:tag

注釈

--insecure フラグは、マニフェストリストへの注釈(annotate)には不要です。注釈とは、マニフェストリストのローカル範囲でのコピーだからです。 docker manifest inspect をローカルに保管しているマニフェストリストに対して処理する時は、 --insecure フラグを省略できます。ローカルに保管したマニフェストリストは、 engine が docker pull する時には使われないので注意してください。

親コマンド

コマンド 説明
docker Docker CLI のベースコマンド。

子コマンド

コマンド 説明
docker manifest annotate ローカルイメージマニフェストに追加情報を追加
docker manifest crate ローカルマニフェスト用の注記(annotating)を作成し、レジストリに送信
docker manifest inspect イメージのマニフェストか、マニフェストリストを表示
docker manifest push マニフェストリストをリポジトリに送信
docker manifest rm ローカルストレージから1つまたは複数のマニフェストリストを削除