marvin.im

Docker private Registry mit Authentifizierung

Hallo

da ich auf der Suche war, mein eigenes privates Docker Registry mit Authentifizierung zu betreiben, hier die Ergebnisse:

Das offizielle Image für eine Docker Registry ist einfach registry. Ihr könnt also mittels

 docker run -d -p 5000:5000 -v /tmp:/registry \
 -e 'SETTINGS_FLAVOR=local' -e 'STORAGE_PATH=/registry' \
 -e 'SEARCH_BACKEND=sqlalchemy' registry

eine Registry starten, welche auf allen Interfaces auf Port 5000 lauscht und die Images nach /tmp schreibt.

Die Environment Variable SEARCH_BACKEND definiert das Search-Backend und macht es möglich, das Ihr in eurem Registry nach Images wie im offiziellen Docker Registry suchen könnt. Lasst Ihr diese Variable weg, so funktioniert die Suche nicht.

Zurück zur Authentifizierung.

Die offizielle Registry von Docker unterstützt von Haus aus keine Authentifizierung mit Basic Auth. Es ist zu empfehlen, die Docker Registry nicht direkt ins Internet zu hängen, sondern ggfs. mittels Reverse Proxy.

Die zwei Lösungswege

Mittels Nginx Reverse Proxy

Ich habe euch da schon mal was vorbereitet… somit könnt Ihr euch viel Zeit sparen.

Einfach den Container marvambass/nginx-registry-proxy in Verbindung mit dem registry Container benutzen.

Mehr Infos zur Benutzung, auf der Docker Registry Site: https://registry.hub.docker.com/u/marvambass/nginx-registry-proxy/

Wenn Ihr lieber selbst Hand anlegt, ich habe den Container mittels diesem Tutorial gebaut: https://www.digitalocean.com/community/tutorials/how-to-set-up-a-private-docker-registry-on-ubuntu-14-04

Mittels SSH Port Forwarding.

auf dem Server

# docker registry welche nur auf 127.0.0.1 lauscht starten
docker run -d -p 127.0.0.1:5000:5000 -v /tmp:/registry \
-e 'SETTINGS_FLAVOR=local' -e 'STORAGE_PATH=/registry' \
-e 'SEARCH_BACKEND=sqlalchemy' registry

auf dem Client

# bind local port 5000 to serverport 5000
ssh -N -L 5000:127.0.0.1:5000 user@server.tld

Und schon habt ihr eine abgesicherte private Docker Registry

WICHTIG

Ich benutze in meinen Beispielen immer /tmp, dies solltet Ihr in Produktion auf ein von euch gewünschtes passendes Verzeichnis ändern.