Docker registry v2 web User Interface
Branch: master
Clone or download
Permalink
Type Name Latest commit message Commit time
Failed to load latest commit information.
bin Release v1.1.0: Add `PULL_URL` option for docker pull customisation Feb 12, 2019
demo [demo] Use raw.githubusercontent.com endpoint instead of joxit.github.io Jan 26, 2019
dist Release v1.1.0: Add `PULL_URL` option for docker pull customisation Feb 12, 2019
examples Add contributors section Dec 3, 2018
nginx Add `proxy_ssl_server_name` to nginx for strict SNI checking Feb 7, 2019
src Release v1.1.0: Add `PULL_URL` option for docker pull customisation Feb 12, 2019
.dockerignore [docker-multi-stage] Add multi-stage-build for alpine version Dec 26, 2018
.gitignore Add .idea directory to .ignore Nov 30, 2018
Dockerfile [docker-multi-stage] Add multi-stage-build for alpine version Dec 26, 2018
Dockerfile.static Add debian image version (joxit/docker-registry-ui:debian) Mar 18, 2018
LICENSE Initial commit Apr 9, 2016
README.md Release v1.1.0: Add `PULL_URL` option for docker pull customisation Feb 12, 2019
_config.yml Add analytics May 4, 2017
arm32v7-static.dockerfile Upgrade to v0.4.0 Jul 23, 2018
arm32v7.dockerfile Add arm32v7 support Apr 4, 2018
arm64v8-static.dockerfile Upgrade to v0.4.0 Jul 23, 2018
arm64v8.dockerfile Add arm64v8 support Jul 18, 2018
debian-static.dockerfile Upgrade to v0.4.0 Jul 23, 2018
debian.dockerfile Add debian image version (joxit/docker-registry-ui:debian) Mar 18, 2018
docker-registry-ui.gif Release v1.0.0: Image aggregation and catalog UI revamped Jan 9, 2019
gulpfile.js Release v1.0.0: Image aggregation and catalog UI revamped Jan 9, 2019
package.json Release v1.1.0: Add `PULL_URL` option for docker pull customisation Feb 12, 2019
screenshot.png Release v1.0.0: Image aggregation and catalog UI revamped Jan 9, 2019
static.dockerfile [docker-multi-stage] Add multi-stage-build for alpine version Dec 26, 2018

README.md

Docker Registry UI

Overview

This project aims to provide a user interface for your private docker registry v2. There is no default registry on this UI, you should add your own with the UI. You can manage more than one registry server. All registries will be stored in the local storage of your browser.

This web user interface uses Riot the react-like user interface micro-library and riot-mui components.

GitHub Page and Live Demo

preview

Features

  • List all your repositories/images.
  • List all tags for a repository/image
  • Sort the tag list
  • One interface for many registries
  • Use a secured docker registry
  • Share your docker registry with query parameter url (e.g. https://joxit.github.io/docker-registry-ui/demo?url=https://registry.example.com)
  • Use joxit/docker-registry-ui:static as reverse proxy to your docker registry (This will avoid CORS).
  • Display image size (see #30)
  • Add Title when using REGISTRY_URL (see #28)
  • Alpine and Debian based images with supports for arm32v7 and arm64v8
  • Copy docker pull command to clipbloard
  • Show sha256 for specific tag (hover image tag)
  • Display image creation date (see #49)
  • Display image history (see #58)
  • Display image/tag count
  • Image aggregation (see #56)
  • Customise docker pull command on static registry UI (see #71)

Getting Started

Basic

First you need node and npm in order to download dependencies.

git clone https://github.com/Joxit/docker-registry-ui.git
cd docker-registry-ui
npm install

Now you can open index.html with your browser or use a http-server

npm install -g http-server
http-server

Docker

The docker contains the source code and a node webserver in order to serve the docker-registry-ui.

Get the docker image

You can get the image in three ways

From sources with this command:

git clone https://github.com/Joxit/docker-registry-ui.git
# Alpine
docker build -t joxit/docker-registry-ui:latest docker-registry-ui
docker build -t joxit/docker-registry-ui:static -f docker-registry-ui/static.dockerfile docker-registry-ui
# Debian
docker build -t joxit/docker-registry-ui:debian -f docker-registry-ui/debian.dockerfile docker-registry-ui
docker build -t joxit/docker-registry-ui:static -f docker-registry-ui/debian-static.dockerfile docker-registry-ui

Or build with the url:

# Alpine
docker build -t joxit/docker-registry-ui:latest github.com/Joxit/docker-registry-ui
docker build -t joxit/docker-registry-ui:static -f static.dockerfile github.com/Joxit/docker-registry-ui
# Debian
docker build -t joxit/docker-registry-ui:debian -f debian.dockerfile github.com/Joxit/docker-registry-ui
docker build -t joxit/docker-registry-ui:debian-static -f debian-static.dockerfile github.com/Joxit/docker-registry-ui

Or pull the image from docker hub:

# Alpine
docker pull joxit/docker-registry-ui:latest
docker pull joxit/docker-registry-ui:static
# Debian
docker pull joxit/docker-registry-ui:debian
docker pull joxit/docker-registry-ui:debian-static

Run the docker

To run the docker and see the website on your 80 port, try this:

docker run -d -p 80:80 joxit/docker-registry-ui

Run the static docker

Some env options are available for use this interface for only one server.

  • URL: set the static URL to use (You will need CORS configuration). Example: http://127.0.0.1:5000. (Required)
  • REGISTRY_URL: your docker registry URL to contact (CORS configuration is not needed). Example: http://my-docker-container:5000. (Can't be used with URL, since 0.3.2).
  • DELETE_IMAGES: if this variable is empty or false, delete feature is deactivated. It is activated otherwise.
  • REGISTRY_TITLE: Set a custom title for your user interface when using REGISTRY_URL (since 0.3.4).
  • PULL_URL: Set a custom url for the docker pull command, this is useful when you use REGISTRY_URL and your registry is on a different host (since 1.1.0).

Example with URL option.

docker run -d -p 80:80 -e URL=http://127.0.0.1:5000 -e DELETE_IMAGES=true joxit/docker-registry-ui:static

Example with REGISTRY_URL, this will add a proxy to your registry. Your registry will be accessible here : http://127.0.0.1/v2, this will avoid CORS errors (see #25). Be careful, joxit/docker-registry-ui and registry:2 will communicate, both containers should be in the same network or use your private IP.

docker network create registry-ui-net
docker run -d --net registry-ui-net --name registry-srv registry:2
docker run -d --net registry-ui-net -p 80:80 -e REGISTRY_URL=http://registry-srv:5000 -e DELETE_IMAGES=true -e REGISTRY_TITLE="My registry" joxit/docker-registry-ui:static

There are some examples with docker-compose and docker-registry-ui as proxy here or docker-registry-ui as standalone here.

Using CORS

Your server should be configured to accept CORS.

If your docker registry does not need credentials, you will need to send this HEADER:

Access-Control-Allow-Origin: '*'

If your docker registry need credentials, you will need to send these HEADERS:

http:
  headers:
    Access-Control-Allow-Origin: '<your docker-registry-ui url>'
    Access-Control-Allow-Credentials: true
    Access-Control-Allow-Methods: ['HEAD', 'GET', 'OPTIONS'] # Optional

Using delete

For deleting images, you need to activate the delete feature in your registry:

storage:
    delete:
      enabled: true

And you need to add these HEADERS:

http:
  headers:
    Access-Control-Allow-Methods: ['HEAD', 'GET', 'OPTIONS', 'DELETE']
    Access-Control-Expose-Headers: ['Docker-Content-Digest']

Registry example

Example of docker registry configuration file:

version: 0.1
log:
  fields:
    service: registry
storage:
  delete:
    enabled: true
  cache:
    blobdescriptor: inmemory
  filesystem:
    rootdirectory: /var/lib/registry
http:
  addr: :5000
  headers:
    X-Content-Type-Options: [nosniff]
    Access-Control-Allow-Origin: ['http://127.0.0.1:8001']
    Access-Control-Allow-Methods: ['HEAD', 'GET', 'OPTIONS', 'DELETE']
    Access-Control-Allow-Headers: ['Authorization']
    Access-Control-Max-Age: [1728000]
    Access-Control-Allow-Credentials: [true]
    Access-Control-Expose-Headers: ['Docker-Content-Digest']
auth:
  htpasswd:
    realm: basic-realm
    path: /etc/docker/registry/htpasswd