Dockerレジストリとリポジトリの違い


147

dockerレジストリーとリポジトリーの違いについて混乱しています。Dockerのドキュメントでは2つの単語を同じ意味で使用しているようです。また、リポジトリは、ドキュメントから次のように、イメージと呼ばれることもあります。

リポジトリをレジストリにプッシュするには、ここで見たように、イメージに名前を付けるか、コンテナを名前付きのイメージにコミットする必要があります。

これで、このリポジトリを名前またはタグで指定されたレジストリにプッシュできます。

リポジトリをレジストリにプッシュするにはどうすればよいですか?イメージをリポジトリにプッシュしていませんか?


4
ドッカーのイメージとドッカーのリポジトリはどうですか?
チャーリーパーカー

:リポジトリ対イメージのためstackoverflow.com/questions/31115098/...
wisbucky

1
あなたが知っているならgit、-Docker Registry(デフォルトはhub.docker.com)=> GitHub(github.com); -Docker リポジトリ => Gitリポジトリ; -ドッカータグ => Gitの文献(ブランチ/タグ)
go2null

DockerをGitに適切にマッピングするには:•Dockerレジストリ= Gitサーバー•Dockerリポジトリ= Gitリポジトリ•Dockerタグ= Gitタグ(多かれ少なかれ)
Simon Woodside

回答:


170

Dockerレジストリは、Dockerイメージを格納するサービスです。

Dockerレジストリは、次のいずれかのレジストリのように、パブリックまたはプライベートレジストリとしてサードパーティによってホストされる可能性があります。

または、自分でdockerレジストリをホストできます
(詳細については、https: //docs.docker.com/ee/dtr/を参照 してください)。

Dockerリポジトリは、同じタグを持つ異なるタグを持つ異なるDockerイメージのコレクションです。タグは、リポジトリ内の画像の英数字の識別子です。

たとえば、https://hub.docker.com/r/library/python/tags/を参照してください。公式のPythonイメージにはさまざまなタグがあり、これらのタグはすべてDocker Hubの公式のPythonリポジトリのメンバーです。Docker Hubは、DockerがホストするDockerレジストリです。

もっと読むには:


11
Artifactoryはリストに追加するものです;)私たちはそれを使用します
buildmaestro

2
-そしてそれはArtifactoryためのリンクですjfrog.com/confluence/display/RTF/Docker+Registry
JBaruch

1
Dockerのリポジトリとイメージの違いは何ですか?
チャーリーパーカー

1
リポジトリは、タグでマークされた複数の異なる画像を保存できます。
Nemanja Trifunovic 2016

2
単一の画像に複数のタグを付けることが理にかなっているのはなぜですか?
チャーリーパーカー、

64

Dockerの使用、コンテナを使用したソフトウェアの開発とデプロイの本から

レジストリ、リポジトリ、画像、タグ

画像を保存するための階層的なシステムがあります。次の用語が使用されます。

レジストリ

画像のホスティングと配布を担当するサービス。デフォルトのレジストリはDocker Hubです。

リポジトリ

関連画像のコレクション(通常、同じアプリケーションまたはサービスの異なるバージョンを提供します)。

鬼ごっこ

リポジトリ内の画像に添付された英数字の識別子(例:14.04またはstable)。

そのため、コマンドdocker pull amouat/revealjs:latestamouat/revealjs、Docker Hubレジストリからリポジトリ内で最新のタグが付けられたイメージをダウンロードします。


1
1つの画像に複数のタグを付けることはできますか?
チャーリーパーカー、

1
@charlieはい。例えば、今ubuntu:latestubuntu:16.04同じを持っているImage ID彼らは同じ画像のためだけで複数のタグあることを意味します。
wisbucky 2017

詳細は、のドキュメントに記載されてdocker pullいます。「特定のイメージまたはイメージのセット(つまり、リポジトリ)をダウンロードするには、を使用しますdocker pull。タグが指定されていない場合、Dockerエンジンは:latestデフォルトでタグを使用します。 」では、どのようにして「画像セット(つまりリポジトリ)をダウンロード」するのでしょうか。🤔–
レアードネルソン

1
ランダムな情報:デフォルトのレジストリURLはdocker.ioです
yosefrow

1
私はこれを、レジストリがルートであり、いくつかの子リポジトリを持つツリーのように視覚化します。これらの各リポジトリには、その子としてimages:tagがあります。これらの各レベルには特定の役割があります。レジストリはホスティングの場所のようなものであり、リポジトリはイメージのディレクトリです。私の理解は正しいですか?
Ultrablendz

12

情報を補足する:

  • 通常、リポジトリーをレジストリー(およびその一部であるすべてのイメージ)にプッシュします。ただし、単一のイメージをレジストリにプッシュできます。すべての場合で、を使用しますdocker push
  • 画像は12桁の16進数の画像IDを持っていますが、以下によっても識別されます。 namespace/repo-name:tag
  • イメージのフルネームには、オプションでレジストリのホスト名とポートを前に付けることができます。 myregistryhost:5000/namespace/repo-name:tag
  • 一般的な命名規則では、レジストリのユーザー名を「名前空間」と呼んでいます。

3
あなたの言っていることがわかりますが、技術的にはのようなものはありませんimage-nameDockerのドキュメントuser-name/repo-name:tagによると、形式はである必要があります。(Dockerがより良い用語を使用したことを願っています。それはかなり混乱しており、常に一貫しているわけでもありません)。
wisbucky 2017

@wisbuckyありがとう!回答を更新しました。確かに、1年前にこの質問に回答したとき、ドキュメントはそれほど良くありませんでした。たとえば、Docker用語集に「layer」と「namespace」(!)が含まれていないため、当時はdocker github repoに問題を作成していました
Paulo Merson

1
また、nimmis / docker-alpine-java:latest
Adam

1
Oooops-– docker info |grep Registry
アダム

2

ドッキングウィンドウリポジトリはかわいい組み合わせですregistryimage

docker tag foo <registry>/<image>:<tag>

と同じです

docker tag foo <repository>:<tag>

0

Docker Registryはサービスであり、自分でホストするか(TrustedおよびPrivate)、またはdocker hubをこのサービスのホストにすることができます。通常、ソフトウェアが商用の場合、これは「プライベートで信頼できる」レジストリとしてホストされます。Java開発者にとって、これはMaven Artifactoryのセットアップと多少似ています。

Dockerリポジトリは、「タグ付き」イメージのセットです。たとえば、5つのubuntu:latest画像にタグを付けたとします。

a)Nanoエディター(image1_tag:v1)

b)特定のソフトウェア1(image1_tag:v2)

c)Sudo(image1_tag:v3)

d)Apache httpデーモン(image1_tag:v4)

e)tomcat(image1_tag:v5)

docker pushコマンドを使用して、上記の各イメージをリポジトリにプッシュできます。リポジトリ名が一致する限り、それらは正常にプッシュされ、選択したリポジトリの下に表示され、正しくタグ付けされます。

さて、あなたの質問は、「それで、このリポジトリはどこにホストされているか/誰がサービスを管理しているか」です。そこで登場するのがDocker Registryです。デフォルトでは、プライベート/パブリックリポジトリを維持するために使用できるDockerハブレジストリ(オープンソース)を取得します。そのため、何も変更しなくても、イメージはDockerハブのプライベートリポジトリにプッシュされます。イメージタグをプッシュしたときの出力例は次のとおりです。

docker@my-docker-vm:/$ docker push mydockerhub/my-helloworld-repo:my_tag
The push refers to repository [docker.io/mydockerhub/my-helloworld-repo]
bf41e934d39d: Pushed
70d93396f87f: Pushed
6ec525dfd060: Pushed
705419d10b13: Pushed
a4aaef726d02: Pushed
04964fddc946: Pushed
latest: digest: sha256:eb93c92351bce785aa3ec0de489cfeeaafd55b7d90adf95ecea02629b376e577 size: 1571
docker@my-docker-vm:/$

すぐに入力docker images --digests -aすると、プッシュされたイメージタグが、Docker Hubレジストリで管理されているプラ​​イベートリポジトリに対して新しい署名を表示していることを確認できます。


「上記の各イメージをリポジトリーにプッシュするdocker pushコマンド」-イメージをリポジトリーにプッシュするのではなく、リポジトリーをレジストリーにプッシュします。それとも私は間違っていますか?
インパラー

0

Docker Hubおよびその他のサードパーティのリポジトリホスティングサービスは「レジストリ」と呼ばれます。レジストリは、リポジトリのコレクションを格納します。

レジストリには多くのリポジトリがあり、リポジトリには同じイメージの多くの異なるバージョンがあり、タグで個別にバージョン管理されています。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.