29

I can't find how to manage images in a private registry. I can push or pull an image because i know the id but how to get the list of pushed images ?

Take for example a person who wants to see the available images under the private registry of his organization. How can she do ?

Unless I'm mistaken, I can't find API or Web UI to discover the registry content like the index.docker.io do with the public registry.

Are there any open source projects to manage this ?

thanks.

Larry Cai
  • 55,923
  • 34
  • 110
  • 156
bwilcox
  • 629
  • 1
  • 6
  • 14
  • 6
    I have a created a FOSS web-app just for this purpose: http://github.com/atc-/docker-registry-web; or `docker run -p 8080:8080 atcol/docker-registry-web`; allows searching, deleting, listing, etc for one or many registries – Alex Jun 17 '14 at 19:03
  • 2
    on v2 registry http://mypvtregistry:5000/v2/_catalog would return all available images. – Charith De Silva Dec 08 '15 at 14:01

6 Answers6

16

Are there any open source projects to manage this ?

There is a containerized web application that provides administration of one-to-many private registries. Its name is Docker Registry UI and it is FOSS.

The source is on Github and you can run it in a container like so:

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

Disclaimer: I wrote the web-app as I could not find one myself. I believe this answers your question (as quoted).

Jonas Söderström
  • 4,856
  • 2
  • 36
  • 45
Alex
  • 8,093
  • 6
  • 49
  • 79
12

Thanks Thomas !

To allow the use of the search API, you must start the container by specifying the value of the environment variable SEARCH_BACKEND like this :

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

Then i have a result for this query :

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

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

To list all images, you can do this :

GET http://registry_host:5000/v1/search

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

And to know the available versions of an image :

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

Result :
{
  "0.1": "04e073e1efd31f50011dcde9b9f4d3148ecc4da94c0b7ba9abfadef5a8522d13",
  "0.2": "04e073e1efd31f50011dcde9b9f4d3148ecc4da94c0b7ba9abfadef5a8522d13",
  "0.3": "04e073e1efd31f50011dcde9b9f4d3148ecc4da94c0b7ba9abfadef5a8522d13"
}
bwilcox
  • 629
  • 1
  • 6
  • 14
10

I've written a docker-registry-frontend that you can find on github. It allows you to browse your private registry and do almost everything that is available through the Docker registry API v1. Plus, it can be run as a docker container on its own.

Here's a list of basic features with some screenshots: https://github.com/kwk/docker-registry-frontend/wiki/Features. In addition to these features, there's support for SSL encryption and Kerberos authentication.

Konrad Kleine
  • 4,275
  • 3
  • 27
  • 35
5

I want to present for you, my frontend for private registry, you may try it from github or dockerhub. Also you can find interface screenshots there.

To sum up it has:
- internal db (BoltBD) gives it ability to store info, and as result it responses much more faster then after direct api call like in other projects
- app can pars, store and show info from registry such as:
- image layers info:
- name / tag
- image size and pushes number
- upload and push dates
- image creating commands history
- it is possible to set multiple repositories in case you have more than one registries and observe them in one place
- show statistics pretty, draw curves for uploads number and image sizes for tag with respects to dates


Update 2017-02-15
So far also there was added:

  • find a parent
  • show tree-graph of parents
  • image deletion
  • Bearer token auth support
Evedel
  • 653
  • 5
  • 18
  • This frontend is awesome, lightweight and works very well. FYI, if delete the image from the frontend, the docker register v2 api _catalog would still return the deleted image name as Delete will remove the tag, but not the actual payloads. Thought the frontend not work at first, it took me sometime to figure it out, you can see more detailed discussion at https://github.com/docker/docker-registry/issues/988. – David Apr 18 '17 at 08:27
  • @David thank you, it is pleasure to read, that the staff is helpful! And thank you for the info about deletion glitch. I'll add this info to the readme at next fix or update. You are right, there are the whole bunch of issues with deletion, at the moment, that are caused by the registry caching system. The reason for this one is the same that described in bow readme at [point 3 of deletion section](https://github.com/Evedel/bow#image-deletion), so I'm still waiting for the registry issue to be closed. – Evedel Apr 19 '17 at 05:22
1

As far as I see, the Docker registry has a REST API, very similar to Docker itself. You can find the documentation at http://docs.docker.io/reference/api/registry_api/. But on the first glance I don't see a method to just list all images.

There is also an REST API for the official index (infos at http://docs.docker.io/reference/api/docker-io_api/).

EDIT

I just tested the Docker registry API and it is not so self-explanatory. You can query all images of a certain repository. In my case, my repository is called "thomas/busybox". I can query all images in there by calling:

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

Result:

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

Now I know that I have four images in my repository and I can query every image. The query for the first image would be:

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 <jerome@docker.com>",
  "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
}

You can also search for an image, but I do not get any results:

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

Result:

{"num_results": 0, "query": "thomas", "results": []}
Thomas Uhrig
  • 30,811
  • 12
  • 60
  • 80
  • I tried this API. What is missing is the list of avalaible repositories and the Search API. I am suprised that the API is not more advanced on the private registry. – bwilcox May 19 '14 at 12:12
  • 1
    I think the search API should work if you enable the search index for your private API (which I didn't do yet in my example above). See the example configuration at https://github.com/dotcloud/docker-registry/blob/master/config/config_sample.yml – Thomas Uhrig May 19 '14 at 12:20
  • The links are Broken – deFreitas Jul 04 '16 at 22:53
0

Sonatype Nexus Repository Manager 3.0 has Private Registry for Docker

Praneeth
  • 1,457
  • 5
  • 23
  • 36