Einrichten eines Docker-Repository

Erfahren Sie, wie Sie Ihre Docker-Images speichern, entweder in einer selbst gehosteten lokalen Registry oder in einem Docker Hub-Repository. Auf diese Weise können Sie Ihre Docker-Images speichern und organisieren und Images für mehrere Teams freigeben.

"Registry" versus "Repository".

Ein Repository ist ein Ort, an dem Daten tatsächlich gespeichert werden. Eine Registry ist eine Sammlung von Verweisen auf diese Daten.

Der Katalog einer Bibliothek ist in diesem Beispiel die Registry, die Sie konsultieren würden, um den Standort des gewünschten Buches zu finden. Die eigentlichen Bücherregale der Bibliothek sind ihr Aufbewahrungsort.

Anforderungen

  • Grundkenntnisse in der Verwendung von Docker und Kommandozeilen-Befehlen.
  • Docker wurde auf Ihrem System installiert und läuft dort.
  • Eine Internetverbindung.

Wenn Sie ein selbst gehostetes Repository einrichten und es über das Internet zugänglich machen, benötigen Sie zusätzlich:

Einrichten einer selbst gehosteten Docker-Registry

Docker bietet einen integrierten Registrierungsserver. Der Registry-Server läuft in einem Container, den Sie mit dem Befehl docker run starten können.

Um beispielsweise einen Registrierungsserver namens "my-registry" zu starten, lautet der Befehl:

sudo docker run -d -p 5000:5000 --name my-registry registry:2

Hinweis: Wenn Sie eine Firewall verwenden, müssen Sie möglicherweise den Zugriff auf Port 5000 erlauben.

Image in Ihre selbst gehostete Registry verschieben

Der erste Schritt zur Verwendung Ihrer selbst gehosteten Registrierung besteht darin, ein Docker-Image für diese Registrierung mit dem Befehl docker tag zu markieren:

sudo docker tag [image name] localhost:5000/[image name]

Um beispielsweise das Image my-nginx für Ihre selbst gehostete Registry neu zu markieren, lautet der Befehl:

sudo docker tag my-nginx localhost:5000/my-nginx

Sie können dieses Image dann mit folgendem Befehl in Ihre Registry verschieben:

sudo docker push localhost:5000/[image name]

Der Befehl, um das Image, das wir im obigen Beispiel erstellt haben, zu verschieben, lautet:

sudo docker push localhost:5000/my-nginx

Abrufen eines Images aus Ihrer selbst gehosteten Registry

Der Befehl, um ein Image aus Ihrer Registry zu laden, lautet:

sudo docker pull localhost:5000/[image name]

Um beispielsweise das Image, das wir im obigen Beispiel erstellt haben, zu laden, lautet der Befehl:

sudo docker pull localhost:5000/my-nginx

Stoppen und Löschen Ihrer selbst gehosteten Registrierung

Wenn Sie einen Fehler machen oder einfach nur die von Ihnen erstellte Registrierung zusammen mit allen dort gespeicherten Images stoppen und entfernen möchten, verwenden Sie folgenden Befehl:

sudo docker stop [repository name] && docker rm -v [repository name]

Um zum Beispiel die von uns oben erstellte Registry mit Namen My-registry zu stoppen und zu entfernen, lautet der Befehl:

sudo docker stop my-registry && docker rm -v my-registry

Externen Zugriff auf Ihre selbst gehostete Registry ermöglichen

Bevor Sie mit der Freigabe Ihrer privaten Registry beginnen, müssen Sie den Zugriff mit TLS über ein SSL-Zertifikat sichern.

Erstellen Sie ein Verzeichnis namens certs in Ihrem Docker-Root-Verzeichnis. Auf den meisten Systemen ist dies das Verzeichnis /var/lib/docker:

sudo mkdir /var/lib/docker/certs

Geben Sie IhreR SSL-Zertifikat-Datei  (cert) den Namen domain.crt und Ihrem SSL-Schlüssel den Namen domain.key

Wenn Sie eine bestehende, selbst gehostete Registry aktualisieren, müssen Sie diese mit folgendem Befehl stoppen:

sudo docker stop [repository name]

Starten (oder restarten) Sie Ihre selbst gehostete Registry mit dem Befehl:

sudo docker run -d -p 5000:5000 --restart=always --name my-registry -v `pwd`/certs:/certs -e REGISTRY_HTTP_TLS_CERTIFICATE=/certs/domain.crt -e REGISTRY_HTTP_TLS_KEY=/certs/domain.key registry:2

Zugriff auf Ihre selbst gehostete Registry von einem anderen Host aus

Um von einem anderen Host aus auf Ihre Registry zuzugreifen, verwenden Sie [ihre Domain]:5000/[Bildname].

Um beispielsweise ein Image mit dem Namen my-nginx an eine Registry zu übertragen, die auf example.com gehostet wird, müssen Sie zuerst das Image markieren:

sudo docker tag my-nginx example.com:5000/my-nginx

Sie können das Image dann mit folgendem Befehl verschieben:

sudo docker push example.com:5000/ubuntu

Um das gleiche Bild aus dieser Registry zu laden, verwenden Sie den Befehl:

sudo docker pull example.com:5000/ubuntu

Einrichten eines Docker Hub Repository

Die Docker Hub-Website ist ein praktischer Ort, um Ihre Docker-Images in der Cloud zu speichern und zu organisieren. Sie können diese Website verwenden, um Ihr eigenes öffentliches oder privates Repository zu hosten, den Benutzerzugriff auf das Repository zu verwalten und von überall online auf das Repository zuzugreifen.

Offizielle Images

Der Docker Hub ist auch ein ausgezeichneter Ort, um öffentliche Docker-Images  zu durchsuchen. Beachten Sie, dass nur die mit "Official" gekennzeichneten Repositories die offiziellen Versionen der Images enthalten.

official repos

Wir empfehlen, dass Sie nur offizielle Docker-Images laden und ausführen.

Erstellen eines Docker-Hub-Kontos

Um zu beginnen, müssen Sie ein Docker-Hub-Konto einrichten. Füllen Sie Ihre Kontodaten auf der Hauptseite von Docker Hub aus und klicken Sie auf Anmelden.

fill out account details

Überprüfen Sie Ihr E-Mail-Konto auf eine Nachricht, um Ihre Kontoaktivierung abzuschließen, und melden Sie sich dann bei der Website an.

sign into the site

Jedes Docker-Hub-Konto kann eine Reihe von kostenlosen öffentlichen Repositories erstellen. Jedes Konto wird auch mit einem kostenlosen privaten Repository geliefert. Sie können gegen eine monatliche Gebühr weitere private Repositories erwerben.

Organisation und Teams Aufbauen

Mit Docker Hub können Sie Organisationen und Teams einrichten, um eine Reihe von Benutzern zu verwalten. Dies ist praktisch, wenn Sie mehrere verschiedene Personengruppen haben und deren Berechtigungen separat verwalten müssen.

Die drei Zugriffsebenen sind:

  • Lesen (kann nur Images laden, nicht verschieben)
  • Schreiben (kann sowohl Images laden als auch verschieben)
  • Admin (kann Images laden und verschieben sowie Benutzer hinzufügen und löschen)

Erstellen einer Organisation

Klicken Sie im Docker Hub Dashboard auf Organisation erstellen (Create Org.).

click create org

Geben Sie die Details des Unternehmens ein und klicken Sie dann auf Erstellen.

fill out org details

Jedes Unternehmen beginnt mit einem Standardteam, das als Eigentümer (Owner) bezeichnet wird.

Um jemand anderen zu den Eigentümern hinzuzufügen, füllen Sie den Benutzernamen des Docker Hubs aus und klicken Sie auf das blaue +.

add owner

Einstellen Ihrer Organisation auf öffentlich oder privat

Unternehmen sind standardmäßig öffentlich. Um Ihre Organisation auf Privat einzustellen, klicken Sie auf der Hauptseite der Organisation auf Einstellungen (settings).

click settings

Klicken Sie auf Privat und dann auf Speichern.

set to private

Hinzufügen eines Teams

Um ein Team hinzuzufügen, wählen Sie Ihren Organisationsnamen aus dem Dropdown-Menü (falls er nicht bereits ausgewählt ist) und klicken Sie auf Teams.

add team

Klicken Sie auf der Seite Teams auf Team hinzufügen (Create team).

create team

Füllen Sie den Teamnamen und die Beschreibung aus und klicken Sie dann auf Hinzufügen.

create team

Hinweis: Jedes Mal, wenn Sie jemanden zu einem Team hinzufügen, erhält er eine E-Mail von Docker Hub, die ihn über die Änderung informiert.

Erstellen eines Docker Hub Repository

Klicken Sie im Docker Hub Dashboard auf Repository erstellen.

create repo

Füllen Sie die Repository-Details aus (stellen Sie sicher, dass die Dropdown-Liste Sichtbarkeit entweder öffentlich oder privat ist), und klicken Sie dann auf Erstellen.

repo details

Auf der nächsten Seite finden Sie Details zu Ihrem neuen Repository, einschließlich des Docker Pull-Befehls für Ihre Images.

repo created

Einstellen des Teamzugriffs auf das Repository

Um den Zugriff auf Ihr Repository nach Team einzurichten, klicken Sie auf Teammitglieder (collaborators).

collaborators

In unserem Beispiel haben wir zwei Teams:

  • Die QS-Abteilung jdoesoftwareqa, die Lese- (aber nicht Schreib-)Zugriff auf die Images benötigt.
  • Die Entwickler jdoesoftwaredev, die sowohl Lese- als auch Schreibzugriff auf die Images benötigen.

Es ist nicht notwendig, dass die Qualitätssicherung aktualisierte Images in das Repository schiebt, und wir wollen verhindern, dass sie dies aus Versehen tun. Die Entwickler benötigen jedoch vollen Zugriff auf das Repository.

Aus Sicherheitsgründen ist es ratsam, alle Docker-Hub-Benutzer in mindestens zwei Gruppen einzuteilen:

Um den Zugriff eines Teams festzulegen, wählen Sie das Team und die Zugriffsebene aus den Dropdown-Menüs aus und klicken Sie dann auf Team hinzufügen.

set access

Zugriff auf das Docker Hub Repository über die Kommando-Zeile

Um über die Kommando-Zeile auf Ihr Docker Hub-Repository zugreifen zu können, müssen Sie sich zunächst mit dem von Ihnen auf der Website erstellten Login bei Docker Hub authentifizieren:

sudo docker login

Sie werden aufgefordert, Ihren Docker-Hub-Anmeldenamen, Ihr Passwort und Ihre E-Mail-Adresse anzugeben.

login from command line

Sobald Sie sich angemeldet haben, können Sie mit den Befehlen docker push und docker pull auf Ihr Docker Hub Repository zugreifen.

Image in Ihr Docker Hub Repository verschieben

Um ein Image in Ihr Docker-Hub-Repository hochzuladen (Push), müssen Sie zunächst das Bild vorbereiten. Folgendes wird benötigt:

  • Ihr Docker Hub-Benutzername oder der Name Ihrer Docker-Hub-Organisation.
  • Der Name Ihres Docker-Hub-Repositorys.
  • Optional: Ein Versions-Tag. (Wenn kein Tag angegeben ist, wird er standardmäßig auf "latest." gesetzt)

Sie können ein bestehendes Image mit folgendem Befehl umbenennen:

sudo docker tag [existing image name or ID] [Docker Hub username or organization]/[repository name]:[tag]

Wenn der Docker-Hub-Benutzer jdoe beispielsweise ein aktuelles Image mit dem Namen my-ubuntu-test in ein Docker-Hub-Repository mit dem Namen ubuntu-test hochladen und es mit einem Tag der Version 1.0 versehen möchte, müsste das Image zunächst mit folgendem Befehl umbenannt werden:

sudo docker tag my-ubuntu-test jdoe/ubuntu-test:1.0

Wenn jdoe plant, das Image in das Repository unter der Organisationseinheit jdoesoftware zu verschieben, dann lautet der Befehl:

sudo docker tag my-ubuntu-test jdoesoftware/ubuntu-test:1.0

Sie können überprüfen, ob das Image korrekt umbenannt wurde, indem Sie alle Docker-Images auf Ihrem System mit diesem Befehl auflisten:

sudo docker images

Als nächstes können Sie das Image mit folgendem Befehl in das Repository verschieben:

sudo docker push [Docker Hub username or organization name]/[repository name]:[tag]

Der Befehl, um das Image, das wir im vorherigen Beispiel umbenannt haben, zu verschieben, lautet:

sudo docker push jdoe/ubuntu-test:1.0

Oder:

sudo docker push jdoesoftware/ubuntu-test:1.0

Um zu überprüfen, ob das Image an den Docker Hub übertragen wurde, gehen Sie zum Docker-Hub-Dashboard und klicken Sie auf Details für Ihr Repository.

click details

Klicken Sie auf der Repository-Seite auf Tags.

click tags

Hier werden die Versionen aufgelistet, die in das Repository verschoben wurden, zusammen mit der Zeit der letzten Aktualisierung.

show tags

Laden eines Images aus Ihrem Docker Hub Repository

Der Befehl zum Aufrufen eines Images aus Ihrem Docker Hub-Repository wird auf der Repository-Seite auf der Docker Hub-Website angezeigt.

pull command

Der Befehl lautet:

sudo docker pull [your Hub username or organization name]/[your Hub repository name]:[tag]

Um beispielsweise das Image jdoe/ubuntu-test:1.0 zu laden, das wir im obigen Abschnitt auf den Hub geschoben haben, lautet der Befehl:

sudo docker pull jdoe/ubuntu-test:1.0

Oder:

sudo docker pull jdoesoftware/ubuntu-test:1.0

Sie können überprüfen, ob das Image korrekt umbenannt wurde, indem Sie alle Docker-Images auf Ihrem System mit folgendem Befehl auflisten:

sudo docker images