`` docker manifest COMMAND COMMAND ``
在 18.02 (#138)版本中添加
參考鏈接:https://docs.docker.com/engine/reference/commandline/manifest/#push-to-an-insecure-registry
? ? ? ? ? ? ? ? ??http://www.reibang.com/p/fad6b6fb4599
該docker manifest命令本身不執(zhí)行任何操作。為了對(duì)manifest或manifest list進(jìn)行操作繁莹,必須有一個(gè)子命令哪亿。
????1. manifest是一個(gè)文件察郁,這個(gè)文件包含了有關(guān)于鏡像信息缅叠,如層、大小和摘要。docker manifest命令還向用戶提供附加信息怀大,比如構(gòu)建鏡像的操作系統(tǒng)和體系結(jié)構(gòu)。
????2. manifest list 是通過制定一個(gè)或者多個(gè)鏡像名稱創(chuàng)建的鏡像層列表呀闻,它可以被當(dāng)作鏡像名稱在docker pull 和docker run 的命令中使用
理想的情況下:manifest是根據(jù)相同功能化借,不同的os/arch組合的鏡像構(gòu)建的,因此捡多,manifest 通常被稱為“多架構(gòu)鏡像”蓖康。
但是,用戶可以創(chuàng)建一個(gè)指向兩個(gè)鏡像的manifest垒手,然后對(duì)用戶提供一個(gè)唯一的鏡像名稱蒜焊。如:一個(gè)用于amd64的Windows上,一個(gè)用于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? ? ? ? ?允許與不安全的注冊(cè)表通信
????????-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 創(chuàng)建一個(gè)本地的manifest, push到鏡像倉(cāng)庫(kù)中
Options:
????????-a,--amend????????修改現(xiàn)有manifest list
????????--insecure? ? ? ? ?允許與不安全的注冊(cè)表進(jìn)行通信
????????--help? ? ? ? ? ? ? ? 用法
manifest annotate
Usage: docker manifest annotate [OPTIONS] MANIFEST_LIST MANIFEST
添加其他信息到本地鏡像的manifest
Options:
? ? ? --arch string? ? ? ? ? ? ? ???? ????設(shè)置體系結(jié)構(gòu)
? ? ? --help? ? ? ? ? ? ? ? ? ? ? ? ? ? ?????用法
? ? ? --os string? ? ? ? ? ? ? ? ? ? ? ????設(shè)置操作系統(tǒng)
? ? ? --os-version string? ? ? ????? 設(shè)置操作系統(tǒng)版本
? ? ? --os-features stringSlice? 設(shè)置操作系統(tǒng)功能
? ? ? --variant string? ? ? ? ? ? ?????設(shè)置體系結(jié)構(gòu)變體
manifest push
Usage: docker manifest push [OPTIONS] MANIFEST_LIST
將 manifest list 推到 repository
Options:
? ? ? --help? ? ????????? 用法
? ? ? --insecure? ? ? ?允許推送到不安全的倉(cāng)庫(kù)中
????? -p, --purge? ? ? 推送后刪除本地清單列表
使用不安全的registries
manifest命令僅與Docker 倉(cāng)庫(kù)交互榜掌。因此优妙,它無法查詢引擎以獲取允許的不安全倉(cāng)庫(kù)列表。為了允許CLI與不安全的倉(cāng)庫(kù)進(jìn)行交互憎账,某些docker manifest 命令帶有一個(gè)--insecure標(biāo)志套硼。對(duì)于每個(gè)create查詢注冊(cè)表的事務(wù)(例如),--insecure必須指定標(biāo)志胞皱。此標(biāo)志告訴CLI邪意,此注冊(cè)表調(diào)用可能會(huì)忽略安全性問題,例如丟失或自簽名證書朴恳。同樣抄罕,在manifest 推到不安全的倉(cāng)庫(kù)上的時(shí)候,--insecure必須指定該標(biāo)志于颖。如果未與不安全的倉(cāng)庫(kù)一起使用呆贿,清單命令將找不到符合默認(rèn)要求的倉(cāng)庫(kù)。
舉例
1. 檢查鏡像的manifest對(duì)象
``
$ 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命令帶有一個(gè)可選--verbose標(biāo)志森渐,可以提供image的名稱(Ref)做入,體系結(jié)構(gòu)和os(平臺(tái))。就像其他使用映像名稱的docker命令一樣同衣,可以引用帶有或不帶有標(biāo)簽的映像竟块,也可以引用摘要(例如hello-world@sha256:f3b3b28a45160805bb16542c9531888519430e9e6d6ffc09d72261b0d26ff74f)。
這是一個(gè)使用--verbose標(biāo)志檢查鏡像的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. 創(chuàng)建并推一個(gè)manifest list
要?jiǎng)?chuàng)建manifest list耐齐,首先要在本地 create manifest list浪秘,方法是指定要包含在manifest list中的組成鏡像蒋情。 請(qǐng)記住,這已推送到鏡像倉(cāng)耸携,因此棵癣,如果要推送到docker鏡像倉(cāng)以外的其他倉(cāng)庫(kù),則需要使用倉(cāng)庫(kù)名稱或IP和端口創(chuàng)建manifest list夺衍。 這類似于標(biāo)記鏡像并將其推送到外部鏡像倉(cāng)庫(kù)狈谊。
創(chuàng)建manifest list的本地副本后,可以選擇對(duì)其進(jìn)行注釋沟沙。 允許的注釋包括體系結(jié)構(gòu)和操作系統(tǒng)(覆蓋鏡像的當(dāng)前值)河劝,操作系統(tǒng)功能以及體系結(jié)構(gòu)變體。
最后矛紫,需要將清單列表推送到所需的鏡像倉(cāng)赎瞎。 下面是對(duì)這三個(gè)命令的描述,以及將它們?nèi)拷M合在一起的示例颊咬。
$ 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"
? ? ? ? }
? ? ? }
? ]
}
推送到不安全的鏡像倉(cāng)庫(kù)
$ 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