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.