Zum Hauptinhalt springen

Blogs

Erstellen einer lokalen Docker-Registrierung

Dieses Dokument erklärt, wie man eine lokale Registry erstellt, um Container-Images lokal zu speichern.
Es kann auch verwendet werden, um Kubernetes dazu zu bringen, nur Container-Images aus dieser Registry zu verwenden.


Inhalt

  • Eine einfache Registry
  • Docker Registry mit eingeschränktem Zugriff
  • Für AirGap-Umgebungen

 

Haftungsausschluss

Alles, was in Klammern größer als oder kleiner als Zeichen steht, ist vom Benutzer zuzuordnen.

Zum Beispiel:

--name <registry>

 

Wenn Sie der Registry nun einen Namen geben wollen, z. B. k8s.registry, ersetzen Sie diesen durch den folgenden:

--name k8s.registry

 

Alles andere sollte nur geändert werden, wenn man weiß, was man tut! Weiterhin wurde alles, was eingeklammert wurde, eindeutig als Platzhalter ausgewählt. Wenn es also irgendwo wieder auftaucht, in diesem Beispiel, müssen Sie es durch k8s.registry ersetzen.

 

Eine einfache Registry

Der folgende Befehl ist ausreichend

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

 

Die Images, die benötigt werden, müssen jetzt gezogen werden

docker pull <nginx>

und markieren Sie nun die Images, wie Sie sie benennen möchten, mit

docker tag localhost:5000/<k8s.nginx>

Um die Images nun in der lokalen Registry zu haben, müssen Sie entsprechend pushen

docker push localhost:5000/<k8s.nginx>

und wie folgt entfernen

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

Mit dem Befehl

curl localhost:5000/v2/_catalog

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

 

Docker Registry mit eingeschränktem Zugriff

Zunächst müssen Sie einen Benutzer und ein entsprechendes Passwort für die Registry anlegen:

mkdir /etc/docker-registry/

docker run \

--entrypoint htpasswd \

registry:2.7.0 -Bbn <testuser> <testpassword> > /etc/docker-registry/ htpasswd

 

Beachten Sie, dass jetzt registry:2.7.0 und nicht registry:2 benötigt wird!

Ferner, wenn bereits eine Registry existiert, muss diese erst eingestellt werden und ist dann auch in dieser Zeit nicht zugänglich!

 

docker stop <registry>

Nun wird die Registry erneut gestartet, allerdings 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

 

Melden Sie sich schließlich mit dem folgenden Befehl bei der Registry an:

docker login localhost:5000

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

 

Sie können nun wie in Abschnitt 1 Images in die Registry eintragen, aber um die Images zu sehen, müssen Sie nun den Befehl

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

ausführen.

In einigen Fällen kann der Fehlercode X509 erscheinen.

Dann muss die daemon.json im Verzeichnis /etc/docker/ wie folgt erweitert werden

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

 

AirGap-Umgebungen

Die Datei daemon.json im Verzeichnis /etc/docker/ muss um die folgende Zeile ergänzt werden:

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

Am Ende muss der Docker neu gestartet werden und möglicherweise auch der Registry Container.