web-dev-qa-db-ja.com

ミラー付きDockerプライベートレジストリ

2つのDockerコンテナーを作成しました。 1つ目はプライベートDockerレジストリを提供し、2つ目は公式のDockerレジストリのミラーです。

docker run -d --name registry -v /local/path/to/registry:/registry -e SETTINGS_FLAVOR=local -e STORAGE_PATH=/registry -p 5000:5000 registry

docker run -d --name mirror -v /local/path/to/mirror:/registry -e STORAGE_PATH=/registry -e STANDALONE=false -e MIRROR_SOURCE=https:/registry-1.docker.io -e MIRROR_SOURCE_INDEX=https://index.docker.io -p 5555:5000 registry

今、私は両方を組み合わせたいと思います。ユーザーpulls画像を使用する場合は常に、最初にプライベートレジストリを照会し、次にミラーを照会する必要があります。そして、画像がpushedの場合は、プライベートレジストリにのみプッシュする必要があります。

私はこれがどのようにできるかについての考えを持っていません。どんな助けでもありがたいです。

15
0x7d7b

すべてのdocker Pushコマンドを強制的にプライベートレジストリにプッシュすることはできません。 1つの理由は、これらのレジスタをいくつでも持つことができるためです。まず、画像にタグを付けて、どこにプッシュするかをdockerに指示する必要があります(下を参照)。

実行中のプライベートレジストリとローカルミラーで動作するようにDockerホストを設定する方法は次のとおりです。

クライアントのセットアップ

dockerstoreという(解決可能な)ホストでミラーとプライベートレジストリの両方を実行していると仮定しましょう。ポート5555でミラー、5000でレジストリ。

次に、clientマシンで、Dockerデーモンの起動に追加のオプションを渡す必要があります。あなたの場合:

  1. 追加 --registry-mirror=http://dockerstore:5555デーモンにdockerhubではなくローカルミラーを使用するように指示します。 ソース
  2. 追加 --insecure-registry dockerstore:5000追加の設定なしでプライベートレジストリにアクセスします。参照 この答え
  3. Dockerデーモンを再起動します

鏡を使う

イメージをプルすると、最初のソースがローカルミラーになります。 Dockerプルを実行して確認できます。

docker pull debian

出力には、イメージがミラーからプルされているというメッセージがあります-dockerstore:5000

ローカルレジストリの使用

最初にプライベートレジストリにプッシュするためには、画像にタグを付ける必要がありますレジストリのフルネームでプッシュされます。 タグの最初の部分 にドットまたはコロンがあることを確認して、イメージをプライベートレジストリにプッシュする必要があることをdockerに伝えます。

Dockerは「。」を探します。 (ドメイン区切り)または「:」(ポート区切り)は、リポジトリ名の最初の部分がユーザー名ではなく場所であることを学習します。

例:

30d39e59ffe2画像にdockerstore:5000/myapp:stableのタグを付けます

docker tag 30d39e59ffe2 dockerstore:5000/myapp:stable

プライベートレジストリにプッシュする

docker Push dockerstore:5000/myapp:stable

その後、あなたも引っ張ることができます

docker pull dockerstore:5000/myapp:stable
16

リポジトリ名はglobalであることが意図されています。つまり、リポジトリredisは常にDocker Hubからの公式のRedisイメージを参照します。プライベートレジストリを使用する場合は、リポジトリ名の前にレジストリの名前を付けます。 localhost.localdomain:5000/myimage:mytag

そのため、プルまたはプッシュすると、関連するレジストリに自動的に移動します。ミラーの設定は簡単で、--registry-mirror=引数を使用してURLをデーモンに渡すだけです。

これは企業ユーザーには完璧ではないため、これは (終了)Dockerの問題 です。

4
Adrian Mouat

明確にするために、 docker documentation は次のことを確認します。

現在、別のプライベートレジストリをミラーリングすることはできません。中央ハブのみをミラーリングできます。

1
Josiah