Docker Hub und Docker Registrys: Tutorial für Anfänger
Die Nutzung von Docker Hub – der offiziellen Container Registry von Docker – ist regelrecht explodiert. Von November 2019 bis Ende Juli 2020 stiegen die gesamten Pulls (ein Pull entspricht dem Download eines Docker Images) von Docker Hub von 130 Milliarden auf 242 Milliarden. Das zeigt, wie beliebt Containerisierung im Allgemeinen und Docker im Besonderen geworden sind.
Es ist kein Geheimnis, dass Docker allgegenwärtig ist. Aber die Besonderheiten dieses Ökosystems zu verstehen, kann herausfordernd sein. Was genau ist eine Container Registry? Welche Vorteile bietet die Verwendung von Docker Hub? Hier beantworten wir diese Fragen und erklären Ihnen anhand konkreter Beispiele Schritt für Schritt, wie Sie mit Dockers offizieller Registry, Docker Hub, loslegen können.
Was ist eine Docker Registry?
Eine Docker Registry ist ein Service, der Docker Images hostet und verteilt.
In vielen Fällen besteht eine Registry aus mehreren Repositorys, die Images zu einem spezifischen Projekt enthalten. Innerhalb eines bestimmten Repositorys werden Tags verwendet, um zwischen den Versionen eines Images zu unterscheiden (z. B. ubuntu/httpd:version2.4, ubuntu/httpd:version2.5, ubuntu/httpd:version2.6, wobei “version2.x” das Tag ist). Benutzer können einerseits Images, die sie verwenden möchten, downloaden (pull), oder andererseits Images, die sie in einer Registry speichern möchten, uploaden (push).
Durch das Bereitstellen einer zentralen Quelle für Images ermöglichen Registrys eine strengeren Kontrolle der verschiedenen Versionen und erleichtern die Verwaltung und Verteilung von Images. Darüber hinaus bieten viele Registry-Dienste zusätzliche Funktionen, die zur Automatisierung von Build- und Deployment-Prozessen und zur Verbesserung der Sicherheit beitragen.
Docker Registrys können in der Cloud oder lokal gehostet werden. Neben Docker Hub gibt es weitere beliebte Docker Registrys, zum Beispiel:
- Quay
- Googles Container Registry
- Amazons Elastic Container Registry (ECR)
- Unsere JFrog Artifactory und JFrog Container Registry
Sie können sogar Ihre eigene Docker Registry aus dem offiziellen Registry Image erstellen, aber in der Regel lohnt es sich, Alternativen zu erkunden, bevor Sie dieses Base-Image als Ausgangspunkt verwenden.
Was ist Docker Hub?
Docker Hub ist Dockers offizielle cloudbasierte Registry für Docker Images.
Wie zu erwarten, ist Docker Hub als offizielle Registry von Docker die Standard-Registry, wenn Sie Docker installieren. Sie beinhaltet über 100.000 Images, darunter offizielle Images für MongoDB, nginx, Apache, Ubuntu und MySQL, die alle jeweils über eine Milliarde Mal heruntergeladen wurden.
Neben den öffentlichen Repositorys, die jeder verwenden kann, bietet Docker Hub private Repositorys, in denen Einzelpersonen oder Teams Images hosten können, deren Zugriff sie beschränken möchten. Docker Hub bietet auch Features wie GitHub- und Bitbucket-Integrationen, die die Automatisierung von Development-Build-Prozessen und Webhooks unterstützen, die als Trigger für alles Mögliche – von automatisierten Tests bis hin zu Benachrichtigungen – dienen können.
Warum Docker Hub verwenden?
Warum Sie sich bei so vielen verschiedenen Optionen von Docker Registrys für Docker Hub entscheiden sollen? Hier sind einige der entscheidenden Vorteile von Docker Hub:
- Eine große Library mit vertrauenswürdigen Images – Docker Certified Images, Verified Publisher Images (die von Docker zertifiziert und vom Publisher verifiziert wurden) und Official Images, die von Docker veröffentlicht wurden, schaffen zusätzliches Vertrauen für Benutzer. Mit Millionen – oder in einigen Fällen Milliarden – von Downloads für viele häufig verwendete Images können Sie sich auf ein zuverlässiges Basis-Image verlassen, wenn Sie Docker Hub verwenden. Das ist nicht nur aus Nutzerperspektive großartig, sondern kommt auch den Herausgebern zugute, da das Hosting eines Images in Docker Hub Ihrem Projekt zu mehr Sichtbarkeit verhilft.
- Gratis Version – Derzeit bietet das kostenlose Paket von Docker unbegrenzte öffentliche Repositorys sowie ein privates Repository mit bis zu drei Mitarbeitern. Das ist nützlich für grundlegende Tests, um sich mit der Plattform vertraut zu machen. Seit den jüngsten Änderungen der Nutzungsbedingungen ist das Paket jedoch für ernsthafte Entwicklungen ungeeignet.
- Integrierte Security-Features – Alle Konten profitieren von Scans lokaler Image-Schwachstellen. “Team”-Konten erhalten außerdem Zugriff auf Audit-Logs und Multi-Faktor-Authentifizierung (MFA), um Repositorys zusätzlich abzusichern.
- Integrationen und Features, die CI/CD ermöglichen – Docker Hub unterstützt auch GitHub- und Bitbucket-Integrationen, automatisierte Tests, Build-Trigger und Webhooks, um Entwicklungs-Pipelines zu automatisieren und CI/CD (Continuous Integration/Continuous Delivery) zu ermöglichen.
Natürlich gibt es kein Patentrezept – Docker Hub wird also nicht für jeden Use Case die passende Lösung finden können. Wenn Sie beispielsweise zur Reduzierung der Latenz oder zum Datenschutz Images lokal speichern müssen, ist eine Cloud-Plattform wie Docker Hub nicht die richtige Wahl. Als Alternative müssen Sie die Images möglicherweise lokal cachen, um Latenz oder Bandbreitenverbrauch zu reduzieren.
Docker Hub verwenden: Ein Crash-Kurs
Da Sie nun wissen, was Docker Hub ist, können wir jetzt die grundlegende Bedienung durchgehen. Wir zeigen Ihnen, wie Sie ein Image von Docker Hub auf Ihren lokalen Rechner pullen und dann eine Version mit Tag zu Ihrem eigenen Repository pushen.
Wenn Sie gleich mitmachen möchten, benötigen Sie ein Docker Hub-Konto. Wenn Sie noch keinen Account haben, können Sie sich hier anmelden. Außerdem müssen Sie Docker installieren.
Schritt 1: Erstellen Sie Ihr Repository
Sobald Sie ein Docker Hub-Konto haben, können Sie mit nur wenigen Klicks unter https://hub.docker.com/repositories ein Repository erstellen.
Klicken Sie zuerst auf “Create Repository”.
Geben Sie Ihrem Repository einen Namen und verfassen Sie eine Beschreibung, wählen Sie aus, ob es öffentlich oder privat sein soll, und klicken Sie dann auf “Create”.
Schritt 2: Ein Docker Image von Docker Hub pullen
Wenn Sie möchten, können Sie Ihr eigenes Image erstellen, aber für dieses Tutorial werden wir das Image “Hello World” pullen.
Zunächst melden wir uns über unser Terminal mit dem Befehl sudo docker login -u <username> bei unserem Docker-Account an:
johnnyo@LAPTOP-5V55HON5:~$ sudo docker login -u username
Password:
WARNING! Your password will be stored unencrypted in /home/johnnyo/.docker/config.json.
Configure a credential helper to remove this warning. See
https://docs.docker.com/engine/reference/commandline/login/#credentials-store
Login Succeeded
johnnyo@LAPTOP-5V55HON5:~$
ⓘ Beachten Sie die Warnung bezüglich der Anmeldeinformationen, die wir erhalten haben. Für diese Demo ignorieren wir sie, aber wir empfehlen, dass Sie Ihre Anmeldedaten für den Einsatz in der Produktion sichern!
Als Nächstes pullen wir das Docker Image “Hello World” mit dem Befehl docker pull hello-world.
johnnyo@LAPTOP-5V55HON5:~$ sudo docker pull hello-world
Using default tag: latest
latest: Pulling from library/hello-world
0e03bdcc26d7: Pull complete Digest: sha256:8c5aeeb6a5f3ba4883347d3747a7249f491766ca1caa47e5da5dfcf6b9b717c0
Status: Downloaded newer image for hello-world:latest
docker.io/library/hello-world:latest
johnnyo@LAPTOP-5V55HON5:~$
Schritt 3: Ein Image in Ihr privates Repository pushen
Da wir nun das “Hello World”-Image haben, müssen wir es unter einem neuen Namen kopieren, bevor wir es an unser privates Repository senden. Das machen wir mit dem Befehl docker tag <current image name> <our user name>/<new image name>[:tag]. Wir verwenden den Befehl docker images, um eine Vorher-Nachher-Liste unserer Images zu erstellen, damit wir die Änderungen sehen können.
johnnyo@LAPTOP-5V55HON5:~$ sudo docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
hello-world latest bf756fb1ae65 9 months ago 13.3kB
johnnyo@LAPTOP-5V55HON5:~$ sudo docker tag hello-world ourusername/johnnyodemo:v1.1.1.1
johnnyo@LAPTOP-5V55HON5:~$ sudo docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
hello-world latest bf756fb1ae65 9 months ago 13.3kB
ourusername/johnnyodemo v1.1.1.1 bf756fb1ae65 9 months ago 13.3kB
johnnyo@LAPTOP-5V55HON5:~$johnnyo@LAPTOP-5V55HON5:~$
ⓘ Das Ändern eines Image-Namens ändert den Inhalt des Images NICHT. Diese spezielle Änderung ist zwar beliebig, aber wir wissen nun, wie wir lokale Images zu Docker Hub pushen können. Das gilt für JEDES Ihrer lokalen Docker Images.
Jetzt können wir das Image mit dem Befehl docker push <our user name>/<new image name>[:tag] in unser privates Repository pushen.
johnnyo@LAPTOP-5V55HON5:~$ sudo docker push ourusername/johnnyodemo:v1.1.1.1
The push refers to repository [docker.io/ ourusername /johnnyodemo]
9c27e219663c: Layer already exists v1.1.1.1: digest: sha256:90659bf80b44ce6be8234e6ff90a1ac34acbeb826903b02cfa0da11c82cbc042 size: 525
johnnyo@LAPTOP-5V55HON5:~$
Wenn wir zu unserem Docker Hub-Konto zurückkehren, können wir sehen, dass das neue Tag in unserem privaten Repository gespeichert ist.
JFrog Container Registry als Proxy für Docker Hub
Wir haben bereits erwähnt, dass der kostenlose Docker Hub-Tarif die Software-Entwicklung einschränken kann. Einer der Hauptgründe dafür ist die Ratenbegrenzung bei Pushes und Pulls. Das Caching von Images außerhalb von Docker Hub ermöglicht es Ihnen, diese Grenzen zu überwinden. Daher kann die Wahl der richtigen Docker Hub-Proxy- und Caching-Lösung – lokal oder in der Cloud – einen großen Unterschied machen. So können Sie die Vorteile von Docker Hub nutzen (eine Fülle von vertrauenswürdigen Images) und gleichzeitig die Ratenbegrenzung vermeiden, die CI/CD-Workflows behindern kann.
Jetzt sehen wir uns an, wie man JFrog Container Registry als Proxy für Docker Hub einrichtet, um häufig genutzte Images zu cachen. Wir werden für dieses Beispiel die Cloud-Plattform verwenden, aber Sie können JFrog auch lokal kostenlos einrichten.
Pro-Tipp: Für einen tieferen Einblick in die Konfiguration von JFrog Container Registry oder jedes andere die JFrog-Plattform betreffende Thema empfehlen wir, unsere Anleitung zu lesen.
Schritt 1: Erstellen Sie Ihre kostenlose Testversion
Klicken Sie auf diesen Link und erstellen Sie Ihre kostenlose Testversion – keine Kreditkarte erforderlich:
Geben Sie Ihren Benutzernamen, Ihr Passwort usw. ein. Sie erhalten eine E-Mail zur Bestätigung Ihres Kontos. Klicken Sie auf den Link, um Ihre Registrierung abzuschließen.
Hinweis: Wir empfehlen, einen Serverstandort in der Nähe Ihres geografischen Standorts auszuwählen.
Sobald das Bestätigungsfenster angezeigt wird, loggen Sie sich ein und fahren mit Schritt 2 fort.
Schritt 2: Navigieren Sie zum Bereich für Remote Repositorys
Sobald Sie in Ihrem neuen Konto angemeldet sind, klicken Sie auf Administration → Repositorys → Repositorys
Schritt 3: Erstellen eines neuen Remote Repositorys
Klicken Sie auf Remote → + Neues Remote Repository
Klicken Sie im Popup-Fenster SELECT PACKAGE TYPE auf das Docker Icon.
Geben Sie in den Tab Basic Ihren Repository Key ein und verwenden Sie für die URL folgende Adresse für Docker Hub: https://registry-1.docker.io/
Für dieses einfache Beispiel können wir für alles andere die Standardeinstellungen belassen. Wenn Sie Ihr Docker Hub-Konto verknüpfen möchten, damit Ihre Push-/Pull-Anfragen an Docker Hub authentifiziert werden, können Sie das im Tab Advanced tun.
Wenn Sie fertig sind, klicken Sie auf Save & Finish.
Schritt 4: In das neue Konto einloggen und ein Image pullen
Führen Sie in Ihrem Docker-CLI den Befehl docker login <Ihr_server>.jfrog.io aus und geben Sie Ihr Passwort ein. Hier ist ein Beispiel mit dem Konto “johnnyo”:
johnnyo@LAPTOP-5V55HON5:~$ sudo docker login johnnyo.jfrog.io
Username: johnnyo@example.com
Password:
WARNING! Your password will be stored unencrypted in /root/.docker/config.json.
Configure a credential helper to remove this warning. See
https://docs.docker.com/engine/reference/commandline/login/#credentials-store
Login Succeeded
johnnyo@LAPTOP-5V55HON5:~$
Als Nächstes pullen Sie ein Image, wie Sie es auch von Docker Hub tun würden, aber stellen ihm eine URL in folgendem Format voran:
<your_server>.jfrog.io/your_repository/. Wir werden das aktuelle Ubuntu-Image pullen, deshalb verwenden wir:
<your_server>.jfrog.io/your_repository/ubuntu. Um zum Beispiel das neueste Ubuntu-Image mit unserem “johnnyo”-Server und “johnnyo”-Repository zu erhalten:
johnnyo@LAPTOP-5V55HON5:~$ sudo docker pull johnnyo.jfrog.io/johnnyo/ubuntu
Using default tag: latest
latest: Pulling from johnnyo/ubuntu
Digest: sha256:fff16eea1a8ae92867721d90c59a75652ea66d29c05294e6e2f898704bdb8cf1
Status: Downloaded newer image for johnnyo.jfrog.io/johnnyo/ubuntu:latest
techchicago6400.jfrog.io/techchicago6400/ubuntu:latest
johnnyo@LAPTOP-5V55HON5:~$
Wir sehen nun, dass das Image lokal heruntergeladen wird:
johnnyo@LAPTOP-5V55HON5:~$ sudo docker images
[sudo] password for johnnyo:
REPOSITORY TAG IMAGE ID CREATED SIZE
johnnyo.jfrog.io/johnnyo/ubuntu latest d70eaf7277ea 2 days ago 72.9MB
hello-world latest bf756fb1ae65 9 months ago 13.3kB
johnnyo@LAPTOP-5V55HON5:~$
Noch wichtiger ist, dass wir in unserem JFrog-Konto sehen können, dass das Image auch dort zwischengespeichert ist! Wir haben das Image erfolgreich für die zukünftige Verwendung gecacht.
Final Thoughts: Die nächsten Schritte mit Docker Hub
Zusammenfassend haben wir hier behandelt:
- Docker Registrys werden verwendet, um Docker Images zu hosten und zu verteilen.
- Docker Hub ist die offizielle cloudbasierte Registry von Docker.
- Um mit Docker Hub zu beginnen, können Sie ein Image pullen (downloaden) oder eines Ihrer lokalen Images pushen (uploaden).
- Die Wahl der richtigen lokalen oder cloudbasierten Docker Registry – wie JFrog Container Registry – kann Ihnen helfen, Docker Hub optimal in Ihre Entwicklungs-Pipeline zu integrieren.
Natürlich sind das nur die Grundlagen. Der Punkt, an dem Containerisierung wirklich interessant wird, ist bei der Erstellung von Projekten und Entwicklungs-Pipelines (die wiederum zur Unterstützung dieser Projekte erstellt werden). Mit Docker Hub verfügen Sie über eine hervorragende Ressource zur Erstellung nützlicher Basis-Images, auf denen Sie aufbauen können, sowie zur Integration einer Vielzahl von Tools, mit denen Sie Ihre Zusammenarbeit, Tests und CI/CD-Prozesse optimieren können.