17

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

今、私は両方を組み合わせたいと思っています。ユーザーがイメージをプルするときは常に、最初にプライベート レジストリにクエリを実行し、次にミラーにクエリを実行する必要があります。また、イメージがプッシュされるときは、プライベート レジストリにのみプッシュする必要があります。

これを行う方法についてはわかりません。どんな助けでも大歓迎です。

4

4 に答える 4

26

すべてのdocker pushコマンドを強制的にプライベート レジストリにプッシュすることはできません。理由の 1 つは、これらのレジスタをいくつでも持つことができることです。最初に、イメージにタグを付けてプッシュ先を docker に伝える必要があります (下を参照)。

実行中のプライベート レジストリとローカル ミラーと連携するように Docker ホストをセットアップする方法を次に示します。

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

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

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

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

鏡を使う

イメージをプルすると、最初のソースはローカル ミラーになります。docker pull を実行することで確認できます。

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
于 2015-02-17T14:21:31.223 に答える
4

明確にするために、ドッカーのドキュメントでは次のことが確認されています。

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

于 2017-01-11T14:50:01.323 に答える
4

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

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

これは企業ユーザーにとって完璧ではないため、この(クローズド) Docker issue .

于 2015-02-17T13:23:06.857 に答える
3

存在しない場合は、ファイルを作成します。

sudo nano /etc/docker/daemon.json

次に、次を貼り付けます。

{
  "registry-mirrors": [
    "https://hub-mirror.c.163.com",
    "https://mirror.baidubce.com"
  ]
}

次に、Dockerデーモンを再起動します

$ sudo systemctl restart docker

ソース

于 2021-07-04T17:37:17.953 に答える