The KubeOps Team

Erstellen einer lokalen Docker Registry

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.

 

 


 


KubeOps GmbH
Hinter Stöck 17
72406 Bisingen
Germany 

Telefon:
Mail:
Internet:

+49 7433 2781296
This email address is being protected from spambots. You need JavaScript enabled to view it.
www.kubeops.net

KubeOps is certified as

We use cookies on our website. Some of them are essential for the operation of the site, while others help us to improve this site and the user experience (tracking cookies). You can decide for yourself whether you want to allow cookies or not. Please note that if you reject them, you may not be able to use all the functionalities of the site.