8. Docker Registry

Wir wollen unsere eigene Docker Registry betreiben. Hierfür stehen verschiedene technischen Umsetzungen zur Verfügung.

Die Registry steht in den Versionen V1 und V2 zur Verfügung. Vor den Bereitstellungen sollte man die entsprechenden Versionen recherchieren (siehe CentOS / RHEL mit V1).

Techniken Registry:

  • V1 - in Python implementiert

  • V2 - in Golang

Desweiteren starten wir erst einmal mit einer Insecure Registry - also ohne verschlüsselte Transporte.

übersicht über die Bereitstellungen für Docker Registry:

  • Registry Software auf Github https://github.com/docker/distribution

    Anm.: wird hier nicht genutzt.

  • Registry als Docker Image vom Docker Hub https://hub.docker.com/_/registry

    Anm.: mit Debian nutzen.

  • Software in Linux-Distributionen - und wieder: bitte die Version der Registry vorher klären

    Anm.: mit openSUSE nutzen.

  • Docker Hub Account

    Anm.: hat auch Vorteile beim Einschätzen von Docker Hub Images

Erinnerung: die Docker Technik hält Konfiguration vor, wo sie standardmäßig die Registry erwartet:

docker system info | grep -i registry
Registry: https://index.docker.io/v1/

Das lassen wir auch erst einmal so. Auch um die verschlüsselte Kommunikation mit unseren Registries oder die Nutzung von Registry-Mirrors werden wir uns (ggf.) später kümmern.

8.1. Registry Image

Die Umsetzung möglichst auf Debian-System. Anm.: eigenes Docker-Registry-Tool dann mit Suse-System.

Ein offizielles Registry-Image lässt sich auf dem Docker Hub finden und mit docker-compose nachhaltig implementieren.

Für eine Ansprache der eigenen Docker Registry nutzen wir z.B. hub.example.org oder andere FQDNs nach Wahl.

Diese Adresse müssen wir natürlich auflösen lassen - am einfachsten über die /etc/hosts.

Tipp

Bei der Nutzung Hyper-V Default Switch erhält man FQDNs und Namensauflösungen: hostname.mshome.net.

Aber: keine echtes DNS und Routing!

Jetzt benötigen wir nur noch ein Docker Compose Verzeichnis für die docker-compose.yml und schon kann es losgehen.

Docker Compose Ordner anlegen mkdir ~/docker/registry && cd $_ und in Ordner wechseln.

docker-compose.yml (Registry)
registry:
  image: registry:2
  container_name: registry
  restart: always
  ports:
    - 5000:5000
  volumes:
    - /srv/docker/registry:/var/lib/registry

Und los geht es: docker-compose up -d

Damit jetzt auch der unsichere Zugriff auf die Registry möglich ist, muss Docker über /etc/docker/daemon.json entsprechend konfiguriert werden:

{
    [ggf. Vorherige Einträge - diese Zeile weglassen;-)],
    "insecure-registries": [ "hub.example.org:5000" ]
}

Testen der eigenen Registry:

docker pull ubuntu:16.04
docker tag ubuntu:16.04 hub.example.org:5000/ubuntu:16.04
# und jetzt pushen:
docker push hub.example.org:5000/ubuntu:16.04
# löschen der Images:
docker image rm ubuntu:16.04
docker image rm hub.example.org:5000/ubuntu:16.04
# und jetzt das Image aus eigener Registry holen:
docker pull hub.example.org:5000/ubuntu:16.04

Die genutzte Registry (quasi der Weg für das Image) erschließt sich also aus dem Image-Namen!

Hinweis

Ändern Sie den Namen der Registry muss man Anpassungen an Dockerfiles und docker-compose.yml-Dateien vornehmen!

Analyse des Registry-Containers:

docker exec registry ps aux
docker exec registry cat /etc/docker/registry/config.yml

Mit dieser config.yml kann die Registry Konfiguration dann auch angepasst/überschrieben werden.

Links zur Docker Registry:

8.2. Registry Distro-Package

Die Umsetzung erfolgt auf einem openSUSE-System mit dem Paket docker-distribution-registry.

Es muss mit systemctl entsprechend gecheckt (systemctl status registry) und gestartet (systemctl start registry) werden.

Auch hier muss wieder eine Konfiguration für insecure-registries nach obigem Beispiel für die Standard-Registry vorgenommen werden.

über /etc/docker/daemon.json also enntsprechend konfiguriert:

{
    [ggf. Vorherige Einträge - diese Zeile weglassen;-)],
    "insecure-registries": [ "opensuse.mshome.net:5000" ]
}

Repositories einer Registry anzeigen lassen:

curl http://opensuse.mshome.net:5000/v2/_catalog

Hinweis

Tests erst einmal nur mit den jeweils lokalen Maschinen, sonst benötigt man ja vollständiges DNS und Routing!

Das Löschen von Images in privaten Registries ist extrem unhandlich und umständlich (Literatr: Liebel, Kap. 6.4.4, S. 418ff).

8.3. Docker Hub

Empfehlung: eigenen Account auf https://hub.docker.com/signup erzeugen für Repositories.

Docker Befehle: docker login | logout

Authentifizierung hinterlegt (!) in /etc/docker/key.json

Docker Hub

Docker Hub - Webportal