CI-CDには、ステージングイメージを(テストが成功した場合に)最新のものに(REST経由で)タグ付けするロジックがあります。これはレジストリv1で機能しました。
現在v2apiに移動しましたが、レジストリ内の既存のイメージにタグを「追加」する方法がドキュメントに見つかりません。ステージングイメージの「マニフェスト」を表示できる手順にありますが、その方法がわかりませんタグを追加してhttp-投稿します。以下の入力を送信しようとしました
「タグ」:「ステージング」、「最新」、
"tag":["staging"、 "latest"]など
{"schemaVersion":1、 "name": "configservice"、 "tag": "staging"、 "architecture": "AMD64"、 "fsLayers":[..。
マニフェストスキーマバージョン2をサポートするDockerレジストリがある場合は、既存のイメージのマニフェストを新しいタグでアップロードできます。
たとえば、最新バージョンのbusybox
画像にタグを付けるとします。手順は次のとおりです。
既存のマニフェストをダウンロードします:
curl '<registry_url>/v2/mybusybox/manifests/latest' \
-H 'accept: application/vnd.docker.distribution.manifest.v2+json' \
> manifest.json
マニフェストは次のようになります(schemaVersionが2であることに注意してください):
{
"schemaVersion": 2,
"mediaType": "application/vnd.docker.distribution.manifest.v2+json",
"config": {
"mediaType": "application/octet-stream",
"size": 1459,
"digest": "sha256:2b8fd9751c4c0f5dd266fcae00707e67a2545ef34f9a29354585f93dac906749"
},
"layers": [
{
"mediaType": "application/vnd.docker.image.rootfs.diff.tar.gzip",
"size": 667590,
"digest": "sha256:8ddc19f16526912237dd8af81971d5e4dd0587907234be2b83e249518d5b673f"
}
]
}
マニフェストを新しいタグでアップロードします:
curl -XPUT '<registry_url>/v2/mybusybox/manifests/new_tag' \
-H 'content-type: application/vnd.docker.distribution.manifest.v2+json' \
-d '@manifest.json'
詳細なステップバイステップガイドは、この post にあります。
これはあなたの質問に対する直接の答えではありませんが、私はいつも次のことをしました...
docker pull myimage:staging
docker run myimage:staging test
docker tag myimage:staging myimage:release
docker Push myimage:release
これが検索結果に表示されたので、Google Container Registryにこれを直接行うための コマンド が含まれていることを追加したかっただけです。
gcloud container images add-tag gcr.io/project/image:old-tag gcr.io/project/image:new-tag
上記のwhelephで説明したワークフローは機能しましたが、既存のコンテナーに追加のタグを適用するのではなく、新しいコンテナーを作成することになりました。
答え https://stackoverflow.com/a/38362476/843017 変更する場合にのみ機能します[〜#〜]タグ[〜#〜]ですが、リポジトリ名も変更したかったのです。
this のおかげで、私もrepoNameを変更しました!
(彼の助けを借りて Github プロジェクト):
1-マニフェストを取得する(v2スキーマで)
2-すべてのlayer.digestを新しいリポジトリに投稿します
3-postconfig.layer
4-マニフェスト全体を新しいリポジトリに配置する
1- GETマニフェストからreg:5000/v2/{oldRepo}/manifests/{oldtag}
with accept
ヘッダー:application/vnd.docker.distribution.manifest.v2+json
2-すべてのレイヤー:[〜#〜] post [〜#〜]reg:5000/v2/{newRepo}/blobs/uploads/?mount={layer.digest}&from={oldRepoNameWithaoutTag}
3- POSTreg:5000/v2/{newRepo}/blobs/uploads/?mount={config.digest}&from={oldRepoNameWithaoutTag}
4- PUTreg:5000/v2/{newRepo}/manifests/{newTag}
with content-type
header:application/vnd.docker.distribution.manifest.v2+json
and body
from step 1 response
5-お楽しみください!