美文网首页
Docker manifest 详解

Docker manifest 详解

作者: DOB_8199 | 来源:发表于2021-05-27 10:00 被阅读0次

    `` docker manifest COMMAND COMMAND ``

    在 18.02 (#138)版本中添加

    参考链接:https://docs.docker.com/engine/reference/commandline/manifest/#push-to-an-insecure-registry

                      https://www.jianshu.com/p/fad6b6fb4599

    该docker manifest命令本身不执行任何操作。为了对manifestmanifest list进行操作,必须有一个子命令。

        1. manifest是一个文件,这个文件包含了有关于镜像信息,如层、大小和摘要。docker manifest命令还向用户提供附加信息,比如构建镜像的操作系统和体系结构。

        2. manifest list 是通过制定一个或者多个镜像名称创建的镜像层列表,它可以被当作镜像名称在docker pull 和docker run 的命令中使用

    理想的情况下:manifest是根据相同功能,不同的os/arch组合的镜像构建的,因此,manifest 通常被称为“多架构镜像”。

    但是,用户可以创建一个指向两个镜像的manifest,然后对用户提供一个唯一的镜像名称。如:一个用于amd64的Windows上,一个用于amd上的darwin

    从Docker registry v2.3和Docker 1.10 开始,Docker hub就可以pull multi architecture Docker镜像了。

    manifest inspect


    manifest inspect --help

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

    显示镜像的 manifest, or manifest list

    Options:

            --help                用法

            --insecure         允许与不安全的注册表通信

            -v, --verbose     输出其他信息包括 layers 和 platform

    manifest create


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

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

    为annotating 创建一个本地的manifest, push到镜像仓库中

    Options:

            -a,--amend        修改现有manifest list

            --insecure         允许与不安全的注册表进行通信

            --help                用法

    manifest annotate


    Usage: docker manifest annotate [OPTIONS] MANIFEST_LIST MANIFEST

    添加其他信息到本地镜像的manifest

    Options:

          --arch string                       设置体系结构

          --help                                 用法

          --os string                          设置操作系统

          --os-version string            设置操作系统版本

          --os-features stringSlice  设置操作系统功能

          --variant string                 设置体系结构变体

    manifest push


    Usage: docker manifest push [OPTIONS] MANIFEST_LIST

    将 manifest list 推到 repository

    Options:

          --help              用法

          --insecure       允许推送到不安全的仓库中

          -p, --purge      推送后删除本地清单列表

    使用不安全的registries


    manifest命令仅与Docker 仓库交互。因此,它无法查询引擎以获取允许的不安全仓库列表。为了允许CLI与不安全的仓库进行交互,某些docker manifest 命令带有一个--insecure标志。对于每个create查询注册表的事务(例如),--insecure必须指定标志。此标志告诉CLI,此注册表调用可能会忽略安全性问题,例如丢失或自签名证书。同样,在manifest 推到不安全的仓库上的时候,--insecure必须指定该标志。如果未与不安全的仓库一起使用,清单命令将找不到符合默认要求的仓库。

    举例


    1. 检查镜像的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"

                    }

            ]

    }

    ``

    2. 检查镜像的manifest并获取os/arch信息

    该docker manifest inspect命令带有一个可选--verbose标志,可以提供image的名称(Ref),体系结构和os(平台)。就像其他使用映像名称的docker命令一样,可以引用带有或不带有标签的映像,也可以引用摘要(例如hello-world@sha256:f3b3b28a45160805bb16542c9531888519430e9e6d6ffc09d72261b0d26ff74f)。

    这是一个使用--verbose标志检查镜像的manifest的示例:

    $ 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"

            }

    }

    3. 创建并推一个manifest list

    要创建manifest list,首先要在本地 create manifest list,方法是指定要包含在manifest list中的组成镜像。 请记住,这已推送到镜像仓,因此,如果要推送到docker镜像仓以外的其他仓库,则需要使用仓库名称或IP和端口创建manifest list。 这类似于标记镜像并将其推送到外部镜像仓库。

    创建manifest list的本地副本后,可以选择对其进行注释。 允许的注释包括体系结构和操作系统(覆盖镜像的当前值),操作系统功能以及体系结构变体。

    最后,需要将清单列表推送到所需的镜像仓。 下面是对这三个命令的描述,以及将它们全部组合在一起的示例。

    $ 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--archarm

    $ 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

    检查 manifest list

    $ 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

    manifest list处理流程


    相关文章

      网友评论

          本文标题:Docker manifest 详解

          本文链接:https://www.haomeiwen.com/subject/mooksltx.html