Docker registre privé avec miroir

j'ai créé deux dockers. Le premier fournit un registre Docker privé et le second est un miroir du registre officiel 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

maintenant je voudrais combiner les deux. Chaque fois qu'un utilisateur tire images il doit d'abord interroger le registre privé et ensuite le miroir. Et quand les images sont poussés ils ne devraient être poussés que vers le registre privé.

Je n'ai aucune idée de comment cela peut être fait. Toute aide est apprécié.

13
demandé sur h3nrik 2015-02-17 11:12:22

3 réponses

Vous ne pouvez pas forcer tous panneau de pousser commandes de pousser votre registre. Une des raisons est que vous pouvez avoir n'importe quel nombre de ces registres. Vous devez d'abord dire à docker où pousser en étiquetant l'image (Voir plus bas).

Voici comment vous pouvez configurer les hôtes docker pour qu'ils fonctionnent avec un registre privé et un miroir local.

configuration du Client

supposons que vous exécutez à la fois miroir et registre privé sur (résolvable) hôte appelé dockerstore. Miroir sur le port 5555, Registre sur 5000.

Puis sur client machine(s) vous devez passer des options supplémentaires au démarrage du démon docker. Dans ton cas:

  1. Ajouter --registry-mirror=http://dockerstore:5555 dire à daemon de préférer utiliser un miroir local plutôt que dockerhub. source
  2. Ajouter --insecure-registry dockerstore:5000 pour accéder au registre privé sans configuration supplémentaire. Voir cette réponse
  3. redémarrez docker démon

Utiliser le miroir

lorsque vous tirez une image, la première source sera le miroir local. Vous pouvez le confirmer en exécutant un docker pull, par exemple

docker pull debian

dans la sortie il y aura un message que l'image est tirée de votre mirror - dockerstore:5000

Utilisation du Registre local

pour pousser privé de registre, vous devez d'abord marquez l'image pour être poussé avec plein nom de la base de registre. Assurez-vous que vous avez un point ou deux points dans le première partie de la balise, pour dire à docker que l'image doit être poussée dans un registre privé.

Panneau cherche un "."(domaine de séparateur) ou ":" (port de séparateur) d'apprendre que la première partie du référentiel est un nom de lieu et pas un nom d'utilisateur.

Exemple:

balise 30d39e59ffe2 image as dockerstore: 5000 / myapp: stable

docker tag 30d39e59ffe2 dockerstore:5000/myapp:stable

Push-il privé de registre

docker push dockerstore:5000/myapp:stable

Ensuite, vous pouvez tirer ainsi

docker pull dockerstore:5000/myapp:stable
16
répondu Tomasz Sętkowski 2017-05-23 11:47:21

les noms des dépôts sont censés être global, qui est le référentiel redis renvoie toujours à L'image officielle de Redis du Docker Hub. Si vous voulez utiliser un registre privé, vous préfixez le nom du dépôt avec le nom du registre par exemple localhost.localdomain:5000/myimage:mytag.

ainsi quand vous tirez ou poussez, il ira automatiquement au registre pertinent. Le miroir devrait être facile à configurer, il suffit de passer L'URL au démon avec le --registry-mirror= argument.

ce n'est pas parfait pour les utilisateurs en entreprise, d'où cette (fermée) Docker question.

4
répondu Adrian Mouat 2015-02-17 13:23:06

Juste pour être clair, documentation docker confirme que:

il n'est actuellement pas possible de reproduire un autre registre privé. Seulement la centrale peut être mis en miroir.

1
répondu Josiah 2017-01-11 14:50:01