Wie man den docker login-Befehl verwendet, um sich bei Registries zu authentifizieren

DockerDockerBeginner
Jetzt üben

💡 Dieser Artikel wurde von AI-Assistenten übersetzt. Um die englische Version anzuzeigen, können Sie hier klicken

Einführung

In diesem Lab erfahren Sie, wie Sie sich mit dem Befehl docker login bei Docker-Registries authentifizieren können. Wir werden die Authentifizierung bei Docker Hub über die standardmäßige webbasierte Anmeldung, die Authentifizierung bei einer selbst gehosteten Registry mit Benutzername und Passwort sowie die Angabe des Passworts über STDIN für nicht-interaktive Szenarien behandeln. Diese praktische Erfahrung wird Sie mit den wesentlichen Fähigkeiten ausstatten, um Bilder in verschiedenen Docker-Registry-Umgebungen sicher zugreifen und verwalten zu können.


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL docker(("Docker")) -.-> docker/ImageOperationsGroup(["Image Operations"]) docker(("Docker")) -.-> docker/SystemManagementGroup(["System Management"]) docker/ImageOperationsGroup -.-> docker/pull("Pull Image from Repository") docker/SystemManagementGroup -.-> docker/login("Log into Docker Registry") subgraph Lab Skills docker/pull -.-> lab-555166{{"Wie man den docker login-Befehl verwendet, um sich bei Registries zu authentifizieren"}} docker/login -.-> lab-555166{{"Wie man den docker login-Befehl verwendet, um sich bei Registries zu authentifizieren"}} end

Authentifizierung bei Docker Hub über die webbasierte Anmeldung

In diesem Schritt erfahren Sie, wie Sie sich bei Docker Hub über die webbasierte Anmeldemethode authentifizieren können. Dies ist die gebräuchlichste Methode, um sich bei Docker Hub anzumelden und eignet sich für interaktive Sitzungen.

Docker Hub ist ein cloudbasierter Registry-Service von Docker, der es Ihnen ermöglicht, Ihre Docker-Images zu speichern und zu teilen. Um private Images hoch- oder herunterzuladen, müssen Sie sich bei Docker Hub authentifizieren.

Der Befehl docker login wird verwendet, um sich bei einer Docker-Registry zu authentifizieren. Standardmäßig authentifiziert er sich bei Docker Hub.

Öffnen Sie Ihr Terminal in der LabEx-Umgebung. Sie befinden sich im Verzeichnis ~/project.

Um sich bei Docker Hub anzumelden, führen Sie den folgenden Befehl aus:

docker login

Wenn Sie diesen Befehl ausführen, werden Sie aufgefordert, Ihren Docker Hub-Benutzernamen und Ihr Passwort einzugeben.

Login with your Docker ID to push and pull images from Docker Hub. If you don't have a Docker ID, head over to https://hub.docker.com/ to create one.
Username: your_docker_username
Password: your_docker_password

Geben Sie Ihren Docker Hub-Benutzernamen und Ihr Passwort ein, wenn Sie dazu aufgefordert werden. Wenn die Authentifizierung erfolgreich ist, sehen Sie eine ähnliche Meldung wie diese:

WARNING! Your password will be stored unencrypted in /home/labex/.docker/config.json.
Configure a credential helper to remove this warning. See
https://docs.docker.com/engine/reference/commandline/login/#credential-helpers

Login Succeeded

Diese Meldung zeigt an, dass Sie sich erfolgreich bei Docker Hub angemeldet haben. Die Warnung über das unverschlüsselte Passwort ist in diesem Szenario zu erwarten und kann für dieses Lab ignoriert werden.

Nachdem Sie sich angemeldet haben, können Sie private Images von Docker Hub herunterladen oder Ihre eigenen Images in Ihr Repository hochladen.

Versuchen wir, ein öffentliches Image herunterzuladen, um zu bestätigen, dass die Docker-Befehle nach der Anmeldung funktionieren. Wir werden das hello-world-Image herunterladen, ein kleines Testimage.

docker pull hello-world

Sie sollten eine Ausgabe sehen, die anzeigt, dass das Image heruntergeladen und extrahiert wird:

Using default tag: latest
latest: Pulling from library/hello-world
...
Status: Downloaded newer image for hello-world:latest
docker.io/library/hello-world:latest

Dies bestätigt, dass Sie nach der Authentifizierung mit Docker Hub interagieren können.

Authentifizierung bei einer selbst gehosteten Registry mit Benutzername und Passwort

In diesem Schritt erfahren Sie, wie Sie sich bei einer selbst gehosteten Docker-Registry mit Benutzername und Passwort authentifizieren können. Während Docker Hub die Standard-Registry ist, müssen Sie möglicherweise mit privaten Registries interagieren, die in Ihrer Organisation oder bei einem Cloud-Anbieter gehostet werden.

Eine selbst gehostete Registry ist eine Docker-Registry, die Sie selbst einrichten und verwalten, anstatt einen öffentlichen Dienst wie Docker Hub zu nutzen. Dies geschieht oft aus Sicherheits-, Compliance- oder Leistungsgründen.

Um sich bei einer selbst gehosteten Registry zu authentifizieren, verwenden Sie den gleichen Befehl docker login, müssen aber die Adresse der Registry angeben. Das Format lautet docker login <registry_address>.

Für dieses Lab werden wir eine selbst gehostete Registry simulieren. Wir verwenden die Platzhalteradresse myregistry.local. In einer realen Situation wäre dies der tatsächliche Domainname oder die IP-Adresse Ihrer Registry.

Öffnen Sie Ihr Terminal im Verzeichnis ~/project.

Um sich bei unserer simulierten selbst gehosteten Registry anzumelden, führen Sie den folgenden Befehl aus und ersetzen Sie your_registry_username und your_registry_password durch hypothetische Anmeldeinformationen, die Sie für diese Registry verwenden würden:

docker login myregistry.local

Sie werden aufgefordert, den Benutzernamen und das Passwort für die Registry myregistry.local einzugeben:

Login with your Docker ID to push and pull images from myregistry.local. If you don't have a Docker ID, head over to https://hub.docker.com/ to create one.
Username: your_registry_username
Password: your_registry_password

Geben Sie den hypothetischen Benutzernamen und das Passwort ein. Da myregistry.local in dieser Umgebung keine echte, laufende Registry ist, wird die Anmeldung wahrscheinlich fehlschlagen, und Sie erhalten eine Fehlermeldung, die darauf hinweist, dass die Registry nicht erreichbar ist oder die Authentifizierung fehlgeschlagen ist. Dies ist bei dieser Simulation zu erwarten. Der Wichtige Aspekt ist das Verständnis der Befehlssyntax und des Prozesses der Angabe einer anderen Registry.

Error response from daemon: Get "http://myregistry.local/v2/": dial tcp: lookup myregistry.local on 127.0.0.53:53: no such host

Obwohl die Anmeldung fehlgeschlagen ist, weil die Registry nicht existiert, ist die Befehlssyntax docker login <registry_address> für den Versuch, sich bei einer selbst gehosteten Registry zu authentifizieren, korrekt.

In einer realen Situation mit einer laufenden selbst gehosteten Registry würde eine erfolgreiche Anmeldung eine "Login Succeeded"-Meldung ergeben, und Ihre Anmeldeinformationen für diese spezifische Registry würden in Ihrer Docker-Konfigurationsdatei (~/.docker/config.json) gespeichert werden.

Lassen Sie uns die Docker-Konfigurationsdatei untersuchen, um zu sehen, wie die Registry-Informationen gespeichert werden.

cat ~/.docker/config.json

Sie sehen eine JSON-Struktur. Nach einer erfolgreichen Anmeldung bei Docker Hub im vorherigen Schritt sollten Sie einen Eintrag für https://index.docker.io/v1/ sehen. Wenn Sie sich erfolgreich bei myregistry.local angemeldet hätten, würden Sie einen zusätzlichen Eintrag für diese Registry-Adresse sehen.

{
  "auths": {
    "https://index.docker.io/v1/": {
      "auth": "..."
    }
  },
  "HttpHeaders": {
    "User-Agent": "Docker-Client/..."
  },
  "credsStore": "desktop"
}

Der Abschnitt auths enthält die Authentifizierungsinformationen für verschiedene Registries, bei denen Sie sich angemeldet haben. Jeder Schlüssel in auths ist die Registry-Adresse, und der Wert enthält die Authentifizierungsdetails.

Dieser Schritt hat gezeigt, wie Sie die Adresse einer selbst gehosteten Registry angeben, wenn Sie docker login verwenden.

Bereitstellen des Passworts über STDIN für eine nicht-interaktive Anmeldung

In diesem Schritt erfahren Sie, wie Sie Ihr Docker-Registry-Passwort über die Standard-Eingabe (STDIN) bereitstellen können. Diese Methode ist besonders nützlich für nicht-interaktive Szenarien, wie Skripting oder automatisierte Bereitstellungen, in denen Sie nicht manuell das Passwort eingeben können, wenn Sie dazu aufgefordert werden.

Wenn Sie docker login in einem interaktiven Terminal verwenden, werden Sie nach dem Passwort gefragt. In Skripten müssen Sie jedoch eine Möglichkeit haben, das Passwort ohne manuelle Eingriffe zu übergeben. Die Option --password-stdin ermöglicht es Ihnen, das Passwort von der STDIN zu lesen.

Wichtiger Sicherheitshinweis: Das direkte Übergeben von Passwörtern in der Befehlszeile ist im Allgemeinen unsicher, da der Befehl und seine Argumente in der Prozessliste (ps) oder im Shell-Verlauf sichtbar sein können. Das Lesen des Passworts von der STDIN ist eine sicherere Methode für Skripting, da es vermeidet, dass das Passwort an diesen Stellen sichtbar wird.

Öffnen Sie Ihr Terminal im Verzeichnis ~/project.

Um dies zu demonstrieren, werden wir die Anmeldung bei Docker Hub über die STDIN simulieren. Sie benötigen Ihren Docker Hub-Benutzernamen und Ihr Passwort.

Die Befehlsstruktur besteht darin, das Passwort auszugeben und es an docker login --username <your_docker_username> --password-stdin zu leiten.

Ersetzen Sie your_docker_username durch Ihren tatsächlichen Docker Hub-Benutzernamen und your_docker_password durch Ihr tatsächliches Docker Hub-Passwort.

echo "your_docker_password" | docker login --username your_docker_username --password-stdin

Nachdem Sie diesen Befehl ausgeführt haben, sollten Sie eine ähnliche Ausgabe wie diese sehen, die auf eine erfolgreiche Anmeldung hinweist:

WARNING! Your password will be stored unencrypted in /home/labex/.docker/config.json.
Configure a credential helper to remove this warning. See
https://docs.docker.com/engine/reference/commandline/login/#credential-helpers

Login Succeeded

Wiederum ist die Warnung über das unverschlüsselte Passwort in dieser Lab-Umgebung zu erwarten.

Diese Methode ist entscheidend für die Automatisierung von Docker-Operationen, die eine Authentifizierung erfordern. Beispielsweise können Sie in einer CI/CD-Pipeline Ihre Docker Hub-Anmeldeinformationen als Umgebungsvariablen speichern und diese Methode verwenden, um sich vor dem Bauen und Hochladen von Images anzumelden.

Sie können diese Methode auch verwenden, um sich bei einer selbst gehosteten Registry anzumelden, indem Sie die Registry-Adresse am Ende des Befehls hinzufügen:

echo "your_registry_password" | docker login myregistry.local --username your_registry_username --password-stdin

Wie im vorherigen Schritt wird dieser Befehl in diesem Lab wahrscheinlich fehlschlagen, da myregistry.local keine laufende Registry ist. Die Syntax für das Bereitstellen des Passworts über die STDIN für eine bestimmte Registry ist jedoch korrekt.

Dieser Schritt hat Ihnen gezeigt, wie Sie eine nicht-interaktive Anmeldung bei einer Docker-Registry durchführen können, indem Sie das Passwort mit der Option --password-stdin an den Befehl docker login leiten.

Zusammenfassung

In diesem Lab haben Sie gelernt, wie Sie sich bei Docker-Registries mit dem Befehl docker login authentifizieren können. Zunächst haben Sie die Authentifizierung bei Docker Hub mit der standardmäßigen interaktiven, web-basierten Anmeldemethode geübt, indem Sie Ihren Benutzernamen und Ihr Passwort eingegeben haben, wenn Sie dazu aufgefordert wurden. Dies hat den grundlegenden Prozess der Anmeldung bei der Standard-Docker-Registry gezeigt.

Anschließend haben Sie die Authentifizierung bei einer selbst gehosteten Registry untersucht, indem Sie die Registry-URL zusammen mit einem Benutzernamen und einem Passwort angegeben haben. Schließlich haben Sie gelernt, wie Sie das Passwort über die STDIN bereitstellen können, was eine sicherere Methode für nicht-interaktive Szenarien und Skripting ist und verhindert, dass das Passwort im Befehlsverlauf oder in Protokollen sichtbar wird. Diese Schritte haben verschiedene Methoden zur Sicherung des Zugangs zu Docker-Registries für das Hochladen und Herunterladen von Images abgedeckt.