web-dev-qa-db-fra.com

Registre privé Docker avec miroir

J'ai créé deux conteneurs Docker. Le premier fournit un registre privé Docker 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, j'aimerais combiner les deux. À chaque fois qu'un utilisateur tire images, il doit d'abord interroger le registre privé, puis le miroir. Et lorsque les images sont poussées , elles ne doivent être placées que dans le registre privé.

Je n'ai aucune idée de la façon dont cela peut être fait. Toute aide est appréciée.

14
h3nrik

Vous ne pouvez pas simplement forcer toutes les commandes docker Push à Push vers votre registre privé. Une des raisons est que vous pouvez avoir n'importe quel nombre de ces registres. Vous devez d’abord dire au menu fixe où Pousser en marquant l’image (voir plus bas).

Voici comment vous pouvez configurer des hôtes docker pour qu’ils fonctionnent avec un registre privé en cours d’exécution et un miroir local.

Configuration du client

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

Ensuite, sur les ordinateurs client, vous devez définir des options supplémentaires pour le démarrage du démon docker. Dans ton cas:

  1. Ajoutez --registry-mirror=http://dockerstore:5555 pour indiquer au démon de préférer utiliser un miroir local plutôt que dockerhub. la source
  2. Ajoutez --insecure-registry dockerstore:5000 pour accéder au registre privé sans autre configuration. Voir cette réponse _
  3. Redémarrer le démon docker

Utiliser le miroir

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

docker pull debian

Dans la sortie, il y aura un message indiquant que l'image est extraite de votre miroir - magasin de cartes: magasin 

Utilisation du registre local

Afin de pousser vers le registre privé, vous devez d'abord marquer l'image pour que le nom complet du registre lui soit transmis. Assurez-vous que vous avez un point ou deux points dans la première partie de la balise pour indiquer au menu fixe que l'image doit être transférée dans un registre privé. 

Docker recherche un «.» (Séparateur de domaine) ou un «:» (séparateur de port) pour apprendre que la première partie du nom du référentiel est un emplacement et non un nom d'utilisateur.

Exemple:

Identifie l'image 30d39e59ffe2 en tant que magasin: 5000/myapp: stable

docker tag 30d39e59ffe2 dockerstore:5000/myapp:stable

Pousser à un registre privé

docker Push dockerstore:5000/myapp:stable

Ensuite, vous pouvez tirer aussi

docker pull dockerstore:5000/myapp:stable
16
Tomasz Sętkowski

Les noms de référentiel sont destinés à être global, c’est-à-dire que le référentiel redis fait toujours référence à l’image officielle Redis du Docker Hub. Si vous souhaitez utiliser un registre privé, vous préfixez le nom du référentiel avec le nom du registre, par exemple. localhost.localdomain:5000/myimage:mytag.

Ainsi, lorsque vous tirez ou appuyez sur Push, le registre correspondant s’affiche automatiquement. Le miroir doit être facile à configurer, il vous suffit de transmettre l’URL au démon avec l’argument --registry-mirror=.

Ce n’est pas parfait pour les utilisateurs en entreprise, d’où ce problème (fermé) Docker .

4
Adrian Mouat

Pour être clair, la documentation de docker confirme que:

Il n’est actuellement pas possible de mettre en miroir un autre registre privé. Seulement le hub central peut être mis en miroir.

1
Josiah