Menu

Web UI für Docker Registry installieren

22. Oktober 2016 - Docker

WebUI für Docker Registry

Einleitung

Es macht natürlich Sinn für die benötigten Docker-Images in einer eigenen Infrastruktur eine eigene Registry zu benutzen.
So benutze auch ich eine sowohl auf meinem lokalen Rechner, als auch für die Server Infrastruktur. Nun habe ich dort schon so einige Images gespeichert und bin gerade dabei den Überblick zu verlieren. Am Anfang habe ich noch händisch auf der Konsole mit curl die Registry API abgefragt, aber mit steigender Zahl der Images wird auch das etwas unhandlich.

Nach kurzer Suche im docker hub (hub.docker.com) habe ich einige gefunden. Dabei machte portus von SuSe einen recht guten Eindruck, ist für professionelle Einsätze bestimmt super, aber für meine Zwecke doch etwas zu gross. Also habe ich versucht die auf den ersten Blick einfachereren Images als UI zum Laufen zu bringen.

Das erste welches funktionierte war:
hyper/docker-registry-web

Von daher wird hier einmal beschrieben, wie man eine Registry aufsetzt, ein Image dort hinein bringt, und es dann zuerst mit curl und dann mit der WebUI auffindbar macht.

Starten der Registry

Die Registry wird mit dem Befehl:

docker run -p 127.0.0.1:5000:5000 -d --name registry registry

gestartet.

Mit der Option ‚-p 127.0.0.1:5000:5000‘ wird der Port 5000 der Registry im Container an den localhost des Host-Rechners gebunden. Ohne die IP Angabe würde der Port auf 0.0.0.0:5000 gemappt werden und die Registry wäre evtl. aus dem Netz ungeschützt erreichbar. Das wollen wir natürlich vermeiden.

Wenn Docker in einer virtuellen Umgebung ausgeführt wird (wie bei Mac Nutzern) ist natürlich zu beachten, dass die Registry auf den localhost der Virtuellen Maschine gebunden wird. In dem Falle kann man auch die 127.0.0.1 weglassen und dann auf der Konsole des Host Rechners gegen die IP der virtuellen Maschine arbeite. Dazu müsste dann auch in den folgenden Beispielen die 127.0.0.1 mit der IP der virtuellen Maschine ersetzt werden. Diese erhält man mit dem Aufruf von ‚docker-machine env‘.

Die Option -d startet den Container im Hintergrund, die Konsole kehrt wieder zurück.

Als letze Option setzen wir hier mit –name registry den Namen des Containers auf ‚registry‘, um ihn später im Netzwerk referenzieren zu können.

Die letze Angabe in dem Aufruf ist ‚registry‘ und bedeutet, dass wir das Image mit dem Namen ‚registry‘ und dem Tag ‚latest‘ starten wollen. Wenn das Image noch nicht auf dem Host vorliegt, so wird es von der docker registry im Netz gezogen.

Die Eingabe von

docker ps

sollte jetzt die gestartete Registry mit dem Namen ‚registry‘ anzeigen.

Speichern von Images in der Registry

Wir wollen 2 verschiedene Images in der frisch gestarteten Registry speichern, damit wir auch etwas zum Anzeigen haben. Als Test-Image soll mal die busybox und ein nginx basierend auf alpine Linux dienen. Die beiden Images sollten nicht allzu groß sein.

Dazu laden wir die Images von der docker registry auf unsere Docker Maschine:

docker pull busybox
docker pull nginx:alpine

Der Befehl:

docker images

soll nun das Vorhanden sein des Images ‚busybox‘ mit dem Tag ‚latest‘ und des Images ’nginx‘ mit dem Tag ‚alpine‘ anzeigen.

Nun sagen wir Docker, dass diese Images auch in unsere Registry gehören. Dazu erstellen wir Tags für die Images:

docker tag busybox 127.0.0.1:5000/busybox
docker tag nginx:alpine 127.0.0.1:5000/nginx:alpine

Bei erneutem Aufruf von:

docker images

sehen wir nun  zusätzliche Images mit den zugewiesenen Tags. Bein 2ten Blick sieht man auch, dass die Image IDs von busybox:latest und 127.0.0.1/busybox:latest gleich sind. Der neue Tag ist nur eine weitere Referenz auf das Image.

Die neuen Tags referenzieren nun unsere Registry und können dorthin einfach gepusht werden:

docker push 127.0.0.1:5000/busybox
docker push 127.0.0.1:5000/nginx:alpine

…. und weg sind sie in der Registry. Jetzt wäre es mal spannend einen Blick in die Registry zu werfen.

Registry Abfrage mit curl

Die Registry kann jetzt einfach mit:

curl http://127.0.0.1:5000/v2/_catalog

ausgelesen werden. Als Antwort wird ein JSON:

{"repositories":["busybox","nginx"]}

zurück geliefert.

Für unser kleines Beispiel wäre das auch noch fast ausreichend, aber bei mehr Images in der Registry wird dies schnell unübersichtlich. Deshalb wollen wir eine kleine UI für die Abfrage.

 

UI für die Registry

Das starten der UI ist ähnlich einfach wie das der Registry selber. Das Image wird von der Docker-Registry im Netz geholt und auf dem Docker Host ausgeführt. Dem Container werden dabei Parameter mit gegeben, damit unsere Registry gefunden wird. Der Aufruf ist:

docker run -d -p 127.0.0.1:8080:8080 --name registry-web --link registry -e REGISTRY_URL=http://registry:5000/v2 -e REGISTRY_NAME=127.0.0.1:5000 hyper/docker-registry-web

Die Optionen -d und -p sind analog zur Registry, -d als daeminze, -p zum Binden des Ports auf dem Host. Die Option –name registry-web ist eigentlich nur aus ästhetischen Gründen angedacht, macht aus funktionaler Sicht keinen Unterschied.

Die Option –link registry sagt dem Container, das der container mit dem Namen ‚registry‘ als host ‚registry‘ erreichbar seien soll. Das ist eine alte Form der Verlinkung im Netzwerk von Containern. Ohne diese Angabe würde der Container der UI den der Registry nicht kennen. Deswegen ist bei dem Start der Registry auch der Name des Containers wichtig, der wird hier referenziert.

Die Option -e definiert eine Umgebungsvariable, welche bei Initialisierung des Containers gesetzt wird. Die Variablen REGISTRY_URL und REGISTRY_NAME werden von der Applikation im Container erwartet und ermöglichen das Auffinden der Registry. REGISTRY_URL gibt dabei an unter welcher URL die Registry zu finden ist. Der Host ‚registry‘ wurde durch die Angabe in der –link Option gesetzt. REGISTRY_NAME teilt der Applikation den Namen der Registry mit. In unserem Falle ist das 127.0.0.1:5000, da wir die Registry auf den localhost gebunden haben. Aus Sicht des UI containers wäre das aber die REGISTRY_URL, von daher werden hier beide Parameter benötigt.

Wenn man nun in einem Browser auf die URL:

http://127.0.0.1:8080/

geht, so kann man nun die beiden Images in der Registry aufgelistet sehen.

bildschirmfoto_2016-10-22_18-21-57

Schlagwörter: