Erstellen einer lokalen Docker Registry


Gentian Rrafshi
DevOps Engineer
 

Dieses Dokument erläutert die Erstellung einer lokalen Registry, um Containerimages lokal zu speichern. Weiter kann man damit Kubernetes dazu bringen, Containerimages nur aus dieser Registry zu benutzen.

Inhalt

  • Ein simples Registry
  • Docker Registry mit eingeschränkten Zugriff
  • Für AirGap-Umgebungen

Disclaimer

Alles, was in Größer-Kleiner-Zeichen umklammert ist, ist vom User selbst zu vergeben. Beispielsweise:

--name <registry>

Möchte man die Registry nun z.B. k8s.registry nennen, so ersetzt man dies wie folgt:

--name k8s.registry

Alles andere sollte nur dann verändert werden, wenn man weiß, was man macht! Weiter, ist alles was eingeklammert wurde als eindeutig als Platzhalter gewählt. Taucht also irgendwo wieder auf, muss, in diesem Beispiel, dies durch k8s.registry zu ersetzen.

 


Eine simple Registry

 

Hierfür reicht der Befehl

docker run -d -p 5000:5000 --restart=always --name registry:2

 

Die Images, welche man benötigt werden, müssen nun gepullt werden

docker pull <nginx>

und tagt die Images nun entsprechend wie sie heißen sollen mit

docker tag localhost:5000/<k8s.nginx>

 

Um die Images nun in der lokalen Registry zu haben, muss dementsprechend gepusht werden

docker push localhost:5000/<k8s.nginx>

und gelöscht wird wie folgt

docker image remove localhost:5000/<k8s.nginx>

 

Mit dem Befehl

curl localhost:5000/v2/_catalog

ist es nun möglich, alle Images, welche sich in der lokalen Registry befinden, zu sehen.

 

Docker Registry mit eingeschränkten Zugriff

Zuerst müssen ein User und ein Entsprechendes Passwort für die Registry erstellt werden:

mkdir /etc/docker-registry/ 
docker run \
--entrypoint htpasswd \
registry:2.7.0 -Bbn <testuser> <testpassword> > /etc/docker-registry/ htpasswd

Beachten werden sollte, dass nun registry:2.7.0 gebraucht wird nicht registry:2!

Weiter muss, falls schon eine Registry existiert, diese dafür erst einmal gestoppt werden und ist dann auch in dieser Zeit nicht erreichbar!

docker stop <registry>

Nun wird die Registry wieder gestartet, aber mit Authentifizierung:

docker run -d \ 
-p 5000:5000 \ 
--restart=always \ 
--name <registry>\ 
-v /etc/docker-registry/:/auth \
-e "REGISTRY_AUTH=htpasswd" \
-e "REGISTRY_AUTH_HTPASSWD_REALM=Registry Realm" \
-e REGISTRY_AUTH_HTPASSWD_PATH=/auth/htpasswd \
registry:2

Zuletzt logt man sich mit folgendem Befehl für die Registry ein:

docker login localhost:5000

Nun müssen User und Passwort eingegeben werden. Dies sind die Einträge in <user> und <testpwd>.

Man kann nun wie im Abschnitt 1 Images in die Registry pullen, aber um die Images zu sehen, muss nun der Befehl

curl -u <user>:<testpwd> localhost:5000/v2/_catalog

ausgeführt werden.

In manchen Fällen kann der Errorcode X509 auftauchen.
Dann muss in die daemon.json im /etc/docker/-Verzeichnis wie folgt erweitert werden

"insecure-registries" : ["localhost:5000"]

 

AirGap-Umgebungen

Die daemon.json im Verzeichnis /etc/docker/ benötigt folgende weitere Zeile:

"allow-nondistributable-artifacts": ["localhost:5000"]

Am Ende muss docker neu gestartet werden und evtl. auch der Registry-Container.

 

 


 


Kubernative GmbH
Ziegelei 9
72336 Balingen

Telefon:
Mail:
Internet:

+49 7433 2781296
Diese E-Mail-Adresse ist vor Spambots geschützt! Zur Anzeige muss JavaScript eingeschaltet sein!
www.kubernative.net

Ein Tochterunternehmen der
ARWINET GmbH besuchen

Wir nutzen Cookies auf unserer Website. Einige von ihnen sind essenziell für den Betrieb der Seite, während andere uns helfen, diese Website und die Nutzererfahrung zu verbessern (Tracking Cookies). Sie können selbst entscheiden, ob Sie die Cookies zulassen möchten. Bitte beachten Sie, dass bei einer Ablehnung womöglich nicht mehr alle Funktionalitäten der Seite zur Verfügung stehen.