Public | Automated Build

Last pushed: 2 months ago
Short Description
As simple as possible docker registry frontend (UI) for your private docker registry
Full Description

Bow

As simple as possible frontend for your private docker registry

Pictures

Features

  • V2 registries support only (secure, self-signed and insecure, DNS and IP:PORT)
  • internal DB (BoltBD) gives it ability to store info, and as a result it responses much faster than after direct api call, and can provide more data
  • app can parse, store and show info from registry such as:
    • image layers info:
      • name / tag
      • image size and push numbers
      • upload and push dates
    • image creating commands history
  • it is possible to set multiple repositories and watch all registries in one place
  • show statistics pretty, draw curves of uploads number and image sizes for a tag with respects to dates
  • find a parent of an image, in case, the parent in the same repo (it is clickable!)
  • show tree-graph of parents for image
  • (new) enabled image deletion (registry --version >= 2.4.0)
  • (the newest) API compatibility checks
  • (killer feature) Bearer token auth support (secure and self-signed auth servers)

Image deletion

To enable image deletion you need to:

  1. Run your registry with the flag -e REGISTRY_STORAGE_DELETE_ENABLED=true
    Example:
    docker run -d -p 5000:5000 --restart=always --name registry \
    -v ./auth:/auth \
    -e "REGISTRY_AUTH=htpasswd" \
    -e "REGISTRY_AUTH_HTPASSWD_REALM=Registry Realm" \
    -e REGISTRY_AUTH_HTPASSWD_PATH=/auth/htpasswd \
    -e REGISTRY_STORAGE_DELETE_ENABLED=true \
    registry:2
    
  2. Set up cron to run garbage collection
    Example:
    10 * * * * docker exec registry bin/registry garbage-collect /etc/docker/registry/config.yml
  3. Also be aware, that there is a known issue in docker registry 2.5.1 in earlier. It means, that if you delete an image from a repository, you will not able to push the exactly same image in that repository. To fix it, you will need each time to perform rebuilding of image with --no-cache mode or restarting the registry docker restart registry.

See more:
https://github.com/docker/docker-registry/issues/988#issuecomment-224280919
https://docs.docker.com/registry/configuration/#delete
https://docs.docker.com/registry/garbage-collection/#/how-garbage-collection-works

Bearer token auth

What is it and how it works see docker documentation.
Bow was tested to work with cesanta/docker_auth in this configuration.

Prospects

I can say that this app almost fit my needs, so in all likelihood, soon, I will not improve it hardly, but this is the list of ideas just for case:

  • "update repos" button (not wait for sleep time)
  • info for the whole repository: size, the number of pushes so on so on so on

How to start use Bow

docker run -d \
   --name=Bow \
   -e BS_LOG_SILENT=yes \
   -v ~/db/bow:/var/lib/bow \
   -p 5001:19808 \
   evedel/bow

How to start contribute to Bow

If you have interest, you can easily start with

git clone https://github.com/evedel/bow.git
git clone https://github.com/fperucic/treant-js project/resources/treant-js
cd bow
docker-compose -f develop/devlinux.yml up -d
docker exec -it develop_golang_1 go get
docker exec -it develop_golang_1 go test -v qurl -repo='https://UsErNaMe:PaSsWoRd@myownregistry.org'
docker exec -it develop_golang_1 go run main.go

Code and packages

This app is written on golang with use of standard packages and:
https://github.com/boltdb/bolt -- BoltDB
https://github.com/fatih/color -- to make cli shiny
https://github.com/wader/disable_sendfile_vbox_linux -- to develop on docker-machine
http://www.chartjs.org/ -- to draw best graphs ever
https://github.com/fperucic/treant-js -- to draw parents graphs

Docker Pull Command
Owner
evedel
Source Repository