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.
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.
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:
--registry-mirror=http://dockerstore:5555
pour indiquer au démon de préférer utiliser un miroir local plutôt que dockerhub. la source--insecure-registry dockerstore:5000
pour accéder au registre privé sans autre configuration. Voir cette réponse _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
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
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 .
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.