web-dev-qa-db-ja.com

Dockerレジストリv2で画像にタグを付ける方法

CI-CDには、ステージングイメージを(テストが成功した場合に)最新のものに(REST経由で)タグ付けするロジックがあります。これはレジストリv1で機能しました。

現在v2apiに移動しましたが、レジストリ内の既存のイメージにタグを「追加」する方法がドキュメントに見つかりません。ステージングイメージの「マニフェスト」を表示できる手順にありますが、その方法がわかりませんタグを追加してhttp-投稿します。以下の入力を送信しようとしました

  1. 「タグ」:「ステージング」、「最新」、

  2. "tag":["staging"、 "latest"]など

    {"schemaVersion":1、 "name": "configservice"、 "tag": "staging"、 "architecture": "AMD64"、 "fsLayers":[..。

15
user1025852

マニフェストスキーマバージョン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 にあります。

11
wheleph

これはあなたの質問に対する直接の答えではありませんが、私はいつも次のことをしました...

docker pull myimage:staging
docker run myimage:staging test
docker tag myimage:staging myimage:release
docker Push myimage:release
8
Paul Becotte

これが検索結果に表示されたので、Google Container Registryにこれを直接行うための コマンド が含まれていることを追加したかっただけです。

gcloud container images add-tag gcr.io/project/image:old-tag gcr.io/project/image:new-tag

上記のwhelephで説明したワークフローは機能しましたが、既存のコンテナーに追加のタグを適用するのではなく、新しいコンテナーを作成することになりました。

1
Mikkel

答え 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-お楽しみください!

1
Negar Zamiri