web-dev-qa-db-fra.com

Docker: Quel est le moyen le plus simple de sécuriser un registre privé?

Nos images Docker expédient des sources fermées, nous devons les stocker dans un endroit sûr, en utilisant notre propre registre Docker privé. Nous recherchons la manière la plus simple de déployer un registre de docker privé avec une couche d'authentification simple .

J'ai trouvé :

Je pense utiliser shipyard/docker-private-registry, mais existe-t-il un autre meilleur moyen?

34
Koryonik

J'apprends toujours à exécuter et à utiliser Docker, considérez ceci comme une idée:

# Run the registry on the server, allow only localhost connection
docker run -p 127.0.0.1:5000:5000 registry

# On the client, setup ssh tunneling
ssh -N -L 5000:localhost:5000 user@server

Le registre est alors accessible sur localhost: 5000, l'authentification se fait via ssh que vous connaissez et utilisez probablement déjà.

Sources:

27
Laurent

Vous pouvez également utiliser un frontal Nginx avec une authentification de base et un certificat SSL.

En ce qui concerne le certificat SSL, j'ai essayé quelques heures pour avoir un certificat auto-signé fonctionnel, mais Docker n'a pas pu travailler avec le registre. Pour résoudre ce problème, j'ai un certificat signé gratuit qui fonctionne parfaitement. (J'ai utilisé StartSSL mais il y en a d'autres). Soyez également prudent lors de la génération du certificat. Si vous souhaitez que le registre s'exécute à l'URL Registry.damienroch.com, vous devez donner cette URL avec le sous-domaine, sinon cela ne fonctionnera pas.

Vous pouvez effectuer toute cette configuration à l'aide de Docker et de mon image nginx-proxy (Voir le README sur Github: https://github.com/zedtux/nginx-proxy Cela signifie que si vous avez installé nginx à l'aide du gestionnaire de packages de distribution, vous le remplacerez par un nginx conteneurisé.

  1. Placez votre certificat (.crt et .key fichiers) sur votre serveur dans un dossier (j'utilise /etc/docker/nginx/ssl/ et les noms des certificats sont private-registry.crt et private-registry.key)
  2. Générez un fichier .htpasswd et téléchargez-le sur votre serveur (j'utilise /etc/docker/nginx/htpasswd/ et le nom de fichier est accounts.htpasswd)
  3. Créez un dossier où les images seront stockées (j'utilise /etc/docker/registry/)
  4. À l'aide de docker, exécutez mon image de proxy nginx
  5. Exécutez le registre docker avec une variable d'environnement que nginx-proxy utilisera pour se configurer.

Voici un exemple des commandes à exécuter pour les étapes précédentes:

Sudo docker run -d --name nginx -p 80:80 -p 443:443 -v /etc/docker/nginx/ssl/:/etc/nginx/ssl/ -v /var/run/docker.sock:/tmp/docker.sock -v /etc/docker/nginx/htpasswd/:/etc/nginx/htpasswd/ zedtux/nginx-proxy:latest
Sudo docker run -d --name registry -e VIRTUAL_Host=registry.damienroch.com -e MAX_UPLOAD_SIZE=0 -e SSL_FILENAME=private-registry -e HTPASSWD_FILENAME=accounts -e DOCKER_REGISTRY=true -v /etc/docker/registry/data/:/tmp/registry registry

La première ligne démarre nginx et la seconde le registre. Il est important de le faire dans cet ordre.

Lorsque les deux sont opérationnels, vous devriez pouvoir vous connecter avec:

docker login https://registry.damienroch.com
14
ZedTuX

J'ai créé un système presque prêt à l'emploi mais certainement prêt à fonctionner pour exécuter un docker-registry: https://github.com/kwk/docker-registry-setup .

Peut-être que ça aide.

Tout ( Registre , Serveur d'authentification et Le serveur LDAP ) fonctionne dans des conteneurs, ce qui rend les pièces remplaçables dès que vous êtes prêt. La configuration est entièrement configurée pour faciliter le démarrage. Il existe même des certificats de démonstration pour HTTP, mais ils devraient être remplacés à un moment donné.

Si vous ne souhaitez pas l'authentification LDAP mais une authentification statique simple, vous pouvez la désactiver dans auth/config/config.yml et saisissez votre propre combinaison de noms d'utilisateur et de mots de passe hachés.

1
Konrad Kleine