title |
---|
Project Page |
This project aims to provide a simple and complete user interface for your private docker registry. You have the choice between two versions, the standard interface and the static interface.
In the standard interface, there is no default registry, you need to add your own within the UI. You can manage more than one registry server. All registries will be stored in the local storage of your browser. No configuration is needed when you launch the UI.
In the static interface, it will connect to a single registry and will not change. The configuration is done at the start of the interface, when you use the docker images whose tags contain the static
keyword.
This web user interface uses Riot the react-like user interface micro-library and riot-mui components.
- List all your repositories/images.
- List all tags for a image.
- Sort the tag list with number compatibility (see #46).
- Use a secured docker registry.
- Display image size (see #30).
- Multi arch supports, Alpine and Debian based images with supports for arm32v7 and arm64v8.
- Copy
docker pull
command to clipboard (see #42). - Show sha256 for specific tag (hover image tag).
- Display image creation date (see #49)
- Display image history (see #58 & #61).
- Image aggregation (see #56).
- Display image/tag count (see #56 issue comment).
- Select multiple tags to delete (see #29).
- Select all tags with ALT + Click to delete (see #80).
- One interface for many registries standard interface.
- Share your docker registry with query parameter
url
(e.g.https://joxit.dev/docker-registry-ui/demo?url=https://registry.example.com
) standard interface. - Use
joxit/docker-registry-ui:static
as reverse proxy (withREGISTRY_URL
environment variable) to your docker registry (This will avoid CORS) static interface. - Add Title when using
REGISTRY_URL
(see #28) static interface. - Customise docker pull command on static registry UI (see #71) static interface.
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
The docker contains the source code and a node webserver in order to serve the docker-registry-ui.
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
To run the docker and see the website on your 80 port, try this:
docker run -d -p 80:80 joxit/docker-registry-ui
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 withURL
, since 0.3.2).DELETE_IMAGES
: if this variable is empty orfalse
, delete feature is deactivated. It is activated otherwise.REGISTRY_TITLE
: Set a custom title for your user interface when usingREGISTRY_URL
(since 0.3.4).PULL_URL
: Set a custom url for the docker pull command, this is useful when you useREGISTRY_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.
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
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']
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
- Use docker-registry-ui as a proxy (use REGISTRY_URL)
- Use docker-registry-ui as standalone (use URL)
- Use docker-registry-ui with traefik
- Use docker-registry-ui with docker registry and Amazon s3 (#75)
- FIX revproxy to registry does not work when published under non-root url (#73)
- Use docker-registry-ui with HTTPS (#20)