Modius - Techblog

  • Ansible
  • Docker
  • DevOps
  • Gastautor werden
  • Newsletter abonnieren
  • Über Mich
  • Kontakt

Docker Registry – Aufbau eines privaten Docker Repositories

Veröffentlicht am 7. August 2019 von Christian Piazzi 1 Kommentar , Aktualisiert am 7. August 2019
Geschätzte Lesezeit: 2 Minuten

Docker Registry Titelbild - Schlüsselbund

Sowohl an der Arbeit wie auch Privat gibt es immer wieder die unterschiedlichsten Gründe, ein Docker Image nicht in den DockerHub zu laden. Will man trotzdem zum Beispiel mit seiner Arbeitsgruppe seine Docker Images auf einfache weise teilen, kann sich die Installation eines eigenen Docker Repositories lohnen. Genau Dafür kann man Docker Registry verwenden. Eleganter weise kann man auch Docker Registry in einem Container laufen lassen.

Download und starten von Docker Registry

Um das entsprechende Image für Docker Registry auf unserem Server zu hinterlegen, laden wir dieses mit docker pull vom DockerHub herunter. Das ganze sieht dann wie folgt aus:

1
2
3
4
5
6
7
8
9
10
docker pull registry
Using default tag: latest
latest: Pulling from library/registry
81033e7c1d6a: Pull complete
b235084c2315: Pull complete
c692f3a6894b: Pull complete
ba2177f3a70e: Pull complete
a8d793620947: Pull complete
Digest: sha256:672d519d7fd7bbc7a448d17956ebeefe225d5eb27509d8dc5ce67ecb4a0bce54
Status: Downloaded newer image for registry:latest

Nach dem Download lege ich zwei Verzeichnisse an. In dem einen Verzeichnis werde ich einen SSL Key für den Registry Container generieren. Der zweite Ordner dient zur Ablage der Docker Images, welche durch den Registry Container verwaltet werden sollen.

1
2
mkdir -p /srv/docker/registry/certs
mkdir -p /srv/docker/registry/data

In /srv/docker/registry/certs generiere ich nun den SSL Key:

1
2
sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /srv/docker/registry/certs/registry.key -out /srv/docker/registry/certs/registry.crt
 

Nun kann der Docker Container gestartet werden. Beim Starten übergeben wir als Parameter noch den Pfad zur Ablage der Images und zum SSL Key.

1
2
3
4
5
sudo docker run -d -p 5000:5000 --restart=always --name registry -v /srv/docker/registry/data:/var/lib/registry \
-v /srv/docker/registry/certs:/certs \
-e REGISTRY_HTTP_TLS_CERTIFICATE=/certs/registry.crt \
-e REGISTRY_HTTP_TLS_KEY=/certs/registry.key \
registry:latest

Anschließend können wir noch einmal prüfen, ob der Docker Container auch gestartet ist:

1
2
3
docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED              STATUS              PORTS                    NAMES
71a665da01de        registry:latest     "/entrypoint.sh /etc…"   About a minute ago   Up About a minute   0.0.0.0:5000->5000/tcp   registry

Push eines Docker Images zum Docker Registry Container

Damit man nun ein Docker Images auf den eigenen Docker Registry Container schieben kann, muss das Docker Images entsprechen mit der Adresse des Registry Container getagt werden. Das ganze sieht für das Images hello-world dann wie folgt aus:

1
docker tag hello-world 192.168.10.95:5000/hello-world

Damit ist die Vorbereitung des Images abgeschlossen. Um jetzt zur Registry pushen zu können, müssen wir die IP Adresse oder den DNS Namen in Insecure registries hinterlegen.

Auf dem Desktop öffnet man dazu die Einstellungen von Docker, im Reiter Deamon kann man dann die Einstellungen entsprechend durchführen.

Nachdem diese Einstellung auf Clientseite durchgeführt wurde, können wir das Image in die Docker Registry pushen. Dafür verwendet man den folgenden Befehl:

1
2
3
4
docker push 192.168.10.75:5000/hello-world
The push refers to repository [192.168.10.75:5000/hello-world]
af0b15c8625b: Pushed
latest: digest: sha256:92c7f9c92844bbbb5d0a101b22f7c2a7949e40f8ea90c8b3bc396879d95e899a size: 524

Pull eines Docker images vom Docker Registry Container

Als nächstes wollen wir testen, ob man das Image vom Registry Server herunterladen kann. Dafür lösche ich als erstes das lokale Image löschen. Mit dem folgenden Befehl können schaue ich mir genau das Image an, welches zuvor in die Registry übertragen wurde.

1
2
3
docker images 192.168.10.75:5000/hello-world
REPOSITORY                       TAG                 IMAGE ID            CREATED             SIZE
192.168.10.75:5000/hello-world   latest              fce289e99eb9        7 months ago        1.84kB

Mit diesem Befehl kann man nach dem löschen prüfen, ob das Image wirklich gelöscht ist. Das Images löscht man nun mit dem folgenden Befehl:

1
2
3
docker image rm 192.168.10.75:5000/hello-world
Untagged: 192.168.10.75:5000/hello-world:latest
Untagged: 192.168.10.75:5000/hello-world@sha256:92c7f9c92844bbbb5d0a101b22f7c2a7949e40f8ea90c8b3bc396879d95e899a

Verwendet man dann noch mal den Befehl zum Anzeigen des Images, wird kein Image mit dem Namen mehr gefunden:

1
2
docker images 192.168.10.75:5000/hello-world
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE

Jetzt können wir das Image von der Registry herunterladen. Dafür verwendet man den folgenden Befehl:

1
2
3
4
5
6
docker pull 192.168.10.75:5000/hello-world
Using default tag: latest
latest: Pulling from hello-world
Digest: sha256:92c7f9c92844bbbb5d0a101b22f7c2a7949e40f8ea90c8b3bc396879d95e899a
Status: Downloaded newer image for 192.168.10.75:5000/hello-world:latest
192.168.10.75:5000/hello-world:latest

Wir verwenden nun wieder den Befehl zum Anzeigen des Images. Jetzt sollte dieses wieder auf unserem System vorhanden sein.

1
2
3
docker images 192.168.10.75:5000/hello-world
REPOSITORY                       TAG                 IMAGE ID            CREATED             SIZE
192.168.10.75:5000/hello-world   latest              fce289e99eb9        7 months ago        1.84kB

Damit haben wir die Funktion des Registry Servers getestet.

Kategorie: Big Data, DevOps, Docker, Linux Tags: Automatisierung, DevOps, Docker, Registry, repository

Über Christian Piazzi

Ich blogge hier über alles, was mir so in meinem ITler Altag über den Weg läuft =)
Man findet mich privat bei Google+ und Twitter

Kommentare

  1. Markus Watermeyer meint

    11. Mai 2021 um 20:41

    Moin, erstmal danke für die Anleitung. War ja gar nicht so wild ;-D

    Habe nun aber das Problem, dass der „Handshake“ irgendwie nicht funktioniert. Ich bekomme folgenden Fehler:

    Get https://:5000/v2/: x509: cannot validate certificate for because it doesn’t contain any IP SANs

    Irgendeine Ahnung, was ich da machen kann?

    Antworten

Schreibe einen Kommentar Antworten abbrechen

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

Kategorien

  • Linux
  • Internet, Bloggen & Co
  • Programmierung
  • Sicherheit
  • Netzwerk & Co
  • Mikrokontroller
  • Windows

Neueste Kommentare

  • Prometheus Installation unter Ubuntu - Modius - Techblog bei Prometheus Installation unter CentOS
  • Rainer bei Docker Container – anzeigen, starten, stoppen und löschen
  • Rainer Wohlfarth bei Docker Container – anzeigen, starten, stoppen und löschen
  • Rainer Wohlfarth bei Docker Container – anzeigen, starten, stoppen und löschen
  • Rainer Wohlfarth bei Docker Container – anzeigen, starten, stoppen und löschen

Werbung

Archive

Kontakt, Datenschutz und Impressum

  • Kontakt
  • Datenschutz
  • Impressum

Schlagwörter

Anleitung Ansible Apache Apple App Store Automatisierung Blogparade C++ Centos centos 7 CentOS7 Container Datenbank DevOps Docker Dr. Racket Dr. Scheme funktional Gastartikel Google HowTo httpd Icinga2 Icinga 2 Installation itsm Linux Minecraft Monitoring mooc MySQL owncloud PHP Plugin Programmierung python Raspberry Pi Schritt für Schritt Server Sicherheit Tutorial Ubuntu Update Windows Wordpress

Copyright © 2025 · Outreach Pro on Genesis Framework · WordPress · Anmelden