web-dev-qa-db-fra.com

Un projet d'API ou d'interface Web pour gérer un registre privé Docker?

Je ne trouve pas comment gérer les images dans un registre privé. Je peux pousser ou extraire une image parce que je connais l'identifiant, mais comment obtenir la liste des images envoyées? 

Prenons l'exemple d'une personne qui souhaite voir les images disponibles sous le registre privé de son organisation. Comment peut-elle faire? 

Sauf erreur de ma part, je ne trouve pas d'API ou d'UI Web pour découvrir le contenu du registre comme le fait le fichier index.docker.io avec le registre public. 

Existe-t-il des projets open source pour gérer cela?

merci.

30
bwilcox

Merci Thomas!

Pour autoriser l'utilisation de l'API de recherche, vous devez démarrer le conteneur en spécifiant la valeur de la variable d'environnement SEARCH_BACKEND comme suit:

docker run -d -e SEARCH_BACKEND=sqlalchemy -p 5000:5000 --name registry samalba/docker-registry

Ensuite, j'ai un résultat pour cette requête: 

GET http://registry_Host:5000/v1/search?q=base

Result :
{ 
   "num_results": 1, 
   "query": "base", 
   "results": [{"description": "", "name": "test/base-img"}]
}

Pour lister toutes les images, vous pouvez faire ceci:

GET http://registry_Host:5000/v1/search

Result :
{ 
   "num_results": 2, 
   "query": "", 
   "results": [
       {"description": "", "name": "test/base-img"},
       {"description": "", "name": "test/base-test"}]
}

Et pour connaître les versions disponibles d'une image: 

GET http://localhost:5000/v1/repositories/**test/base-img**/tags

Result :
{
  "0.1": "04e073e1efd31f50011dcde9b9f4d3148ecc4da94c0b7ba9abfadef5a8522d13",
  "0.2": "04e073e1efd31f50011dcde9b9f4d3148ecc4da94c0b7ba9abfadef5a8522d13",
  "0.3": "04e073e1efd31f50011dcde9b9f4d3148ecc4da94c0b7ba9abfadef5a8522d13"
}
12
bwilcox

Existe-t-il des projets open source pour gérer cela?

Il existe une application Web conteneurisée qui permet d’administrer des registres privés un à plusieurs. Son nom est Docker Registry UI et FOSS. 

Le source est sur Github et vous pouvez l'exécuter dans un conteneur comme ceci:

docker run -p 8080:8080 -v my_data_dir:/var/lib/h2/ atcol/docker-registry-ui

Déni de responsabilité: J'ai écrit l'application Web, car je ne pouvais pas en trouver une moi-même. Je crois que cela répond à votre question (telle que citée).

15
Alex

J'ai écrit un docker-registry-frontend que vous pouvez trouver sur github. Il vous permet de parcourir votre registre privé et de faire presque tout ce qui est disponible via l’API de registre Docker v1. De plus, il peut être exécuté comme un conteneur docker seul.

Voici une liste des fonctionnalités de base avec quelques captures d'écran: https://github.com/kwk/docker-registry-frontend/wiki/Features . Outre ces fonctionnalités, le cryptage SSL et l'authentification Kerberos sont pris en charge.

11
Konrad Kleine

Je veux vous présenter mon interface de registre privé , vous pouvez l’essayer depuis github ou dockerhub . Vous pouvez également y trouver des captures d’écran d’interface.

En résumé, il a:
- internal db (BoltBD) lui donne la possibilité de stocker des informations et, par conséquent, il répond beaucoup plus rapidement qu'après un appel api direct, comme dans d'autres projets
- app peut analyser, stocker et afficher les informations du registre telles que:
- informations sur les couches d'image:
- nom/tag
- taille de l'image et nombre de push
- dates de téléchargement et de diffusion
- historique des commandes de création d'images
- il est possible de définir plusieurs référentiels au cas où vous auriez plusieurs registres et de les observer au même endroit
- afficher les statistiques, dessiner des courbes pour le nombre de téléchargements et la taille des images pour les balises par rapport aux dates


Mise à jour 2017-02-15
Jusque là aussi, on a ajouté: 

  • trouver un parent 
  • affiche l'arborescence des parents 
  • suppression d'image 
  • Prise en charge de l'authentification de jeton 
4
Evedel

Autant que je sache, le registre Docker a une API REST très similaire à Docker elle-même. Vous pouvez trouver la documentation sur http://docs.docker.io/reference/api/registry_api/ . Mais à première vue, je ne vois pas de méthode pour répertorier toutes les images.

Il existe également une API REST pour l'index officiel (infos à http://docs.docker.io/reference/api/docker-io_api/ ).

MODIFIER

Je viens de tester l'API de registre Docker et ce n'est pas si explicite. Vous pouvez interroger toutes les images d'un référentiel donné. Dans mon cas, mon référentiel s'appelle "thomas/busybox". Je peux interroger toutes les images ici en appelant:

https://my-private-registry.com/v1/repositories/thomas/busybox/images

Result:

[
  {
    "id": "2d8e5b282c81244037eb15b2068e1c46319c1a42b80493acb128da24b2090739"
  },
  {
    "id": "6c991eb934609424f761d3d0a7c79f4f72b76db286aa02e617659ac116aa7758"
  },
  {
    "id": "9f4e93171ec525221fa9013d0e21f8690cef68590664eb5249e0b324c5faf31a"
  },
  {
    "id": "511136ea3c5a64f264b78b5433614aec563103b4d4702f3ba7d4d2698e22c158"
  }
]

Maintenant, je sais que j'ai quatre images dans mon référentiel et que je peux interroger chaque image. La requête pour la première image serait:

https://my-private-registry.com/v1/images/2d8e5b282c81244037eb15b2068e1c46319c1a42b80493acb128da24b2090739/json

Result:

{
  "id": "2d8e5b282c81244037eb15b2068e1c46319c1a42b80493acb128da24b2090739",
  "parent": "9f4e93171ec525221fa9013d0e21f8690cef68590664eb5249e0b324c5faf31a",
  "created": "2014-04-24T15:59:59.47081913Z",
  "container": "d15320d6935ca35bc4198e373f29e730f4c53cce32b3809c2fecec22eb30018b",
  "container_config": {
    "Hostname": "4964db5b599b",
    ...
    "Tty": false,
    "OpenStdin": false,
    "StdinOnce": false,
    "Env": [
      "HOME=\/",
      "PATH=\/usr\/local\/sbin:\/usr\/local\/bin:\/usr\/sbin:\/usr\/bin:\/sbin:\/bin"
    ],
    "Cmd": [
      "\/bin\/sh",
      "-c",
      "#(nop) CMD [\/bin\/sh -c \/bin\/sh]"
    ],
    "Image": "9f4e93171ec525221fa9013d0e21f8690cef68590664eb5249e0b324c5faf31a",
    ...
    "OnBuild": [

    ]
  },
  "docker_version": "0.10.0",
  "author": "J\u00c3\u00a9r\u00c3\u00b4me Petazzoni <[email protected]>",
  "config": {
    "Hostname": "4964db5b599b",
    "Domainname": "",
    "User": "",
    "Memory": 0,
    ...
    "Env": [
      "HOME=\/",
      "PATH=\/usr\/local\/sbin:\/usr\/local\/bin:\/usr\/sbin:\/usr\/bin:\/sbin:\/bin"
    ],
    "Cmd": [
      "\/bin\/sh",
      "-c",
      "\/bin\/sh"
    ],
    "Image": "9f4e93171ec525221fa9013d0e21f8690cef68590664eb5249e0b324c5faf31a",
    ...
    "OnBuild": [

    ]
  },
  "architecture": "AMD64",
  "os": "linux",
  "Size": 0
}

Vous pouvez également rechercher une image, mais je n’obtiens aucun résultat:

https://my-private-registry.com/v1/search?q=thomas

Result:

{"num_results": 0, "query": "thomas", "results": []}
1
Thomas Uhrig

Sonatype Nexus Repository Manager 3.0 a Registre privé pour Docker

0
Praneeth