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.