Erste Schritte mit vorgefertigten Docker-Images
Images sind die grundlegende Komponente von Docker. In diesem Leitfaden werden wir besprechen, was Docker-Images sind, wie man sie erstellt, verwaltet und verwendet.
Los geht’s.
Voraussetzungen
- Bevor du mit Docker-Images arbeiten kannst, musst du Docker auf deinem System installieren.
- In dieser Anleitung wird Ubuntu verwendet, aber die Schritte sollten für andere Distributionen ähnlich sein.
- Ein Benutzerkonto mit Root-Rechten.
Was solltest du wissen?
Bevor du mit Docker-Images arbeitest, ist es wichtig, dass du weißt, was sie sind.
Docker-Images sind die grundlegenden Komponenten von Docker. Docker verwendet Images, um Container zu erstellen. Images sind im Wesentlichen Vorlagen, die alle Informationen enthalten, die für die Erstellung eines Containers notwendig sind, z. B. den Code, die Bibliotheken und die Laufzeit.
Ein Docker-Container ist eine Laufzeitinstanz eines Images. Er enthält alles, was das Image enthält, sowie alle Änderungen oder Ergänzungen, die du vornimmst, während der Container läuft. Wenn du zum Beispiel eine neue Anwendung auf deinem System installierst, wird diese in deinem Container installiert.
Verwaltung von Images mit der CLI
Die Verwaltung von Images mit der Docker CLI ist ein Muss für Docker-Administratoren. Das Docker CLI ist ein mächtiges Werkzeug, das dir die vollständige Kontrolle über deine Images und Container gibt. In diesem Abschnitt erfährst du, wie du das Docker CLI zur Verwaltung deiner Images nutzt.
1. Führe den folgenden Befehl aus, um sicherzustellen, dass Docker läuft.
sudo systemctl status docker
2. Wenn Docker nicht läuft, starte es mit dem unten stehenden Befehl.
sudo systemctl start docker
3. Füge dein Benutzerkonto zur Docker-Gruppe hinzu. Melde dich ab und melde dich wieder an, damit die Änderungen wirksam werden.
sudo usermod -aG docker $(whoami)
4. Wenn du den Befehl docker image ausführst, siehst du eine Liste mit allen verfügbaren Optionen für den Befehl docker image.
docker image
Wie unten dargestellt, hat der Befehl docker image viele Optionen, aber einige der am häufigsten verwendeten sind:
- ls: Listet die Images auf deinem System auf.
- pull: Holt ein Image aus einer Registry.
- push: Push ein Image in eine Registry.
- erstellen: Ein neues Image aus einer Dockerdatei erstellen.
- rm: Entferne ein Image aus deinem System.
- tag: Kennzeichne ein Image mit einem Namen.
Um loszulegen, schauen wir uns an, wie du die Images in deinem System auflisten kannst.
5. Führe den Befehl docker image ls aus, um die Images auf deinem Rechner aufzulisten. Der Befehl docker image ls listet alle Images auf deinem Rechner auf, einschließlich der Repositories, aus denen sie bezogen wurden. Die ID, das Repository, das Tag und die Größe des Images.
docker image ls
Angenommen, du willst ein Image von deinem Host entfernen. Du kannst den Befehl rm verwenden. Du kannst den Image-Namen oder die Image-ID verwenden, um ein Image zu entfernen.
docker image rm <image-name>
docker image rm <image-id>
Wenn du die ID verwendest, musst du darauf achten, dass die ersten paar Zeichen der ID für die Bilder in der Liste eindeutig sind. Mit anderen Worten: Die ersten Buchstaben der ID dürfen nicht von anderen Bildern verwendet werden.
6. Um zum Beispiel das Image ubuntu:12.04 zu entfernen, kannst du einen der folgenden Befehle verwenden. Beachte, dass wir nur die ersten paar Buchstaben der ID(5b1) verwenden können, um das Image zu entfernen, da es keine anderen Images mit diesen ersten paar Buchstaben gibt.
docker image rm ubuntu:12.04
docker image rm 5b1
Das ubuntu:12.04-Image wird zusammen mit allen Layern, die zur Erstellung des Images verwendet wurden, von deinem Host gelöscht (siehe unten).
7. Listet die Images auf eurem System erneut auf, um zu überprüfen, dass das ubuntu:12.04-Image nicht mehr aufgeführt ist.
docker image ls
Beachte, dass der Befehl docker image ls und der Befehl docker images genau das Gleiche tun. Allerdings ist der zweite Befehl inzwischen veraltet, da Docker es vorzieht, dass Entwickler den Befehl docker mit den richtigen Unterbefehlen verwenden.Das Gleiche gilt für den Befehl docker rmi. Dieser Befehl wird verwendet, um ein Image und alle seine Schichten zu entfernen, genau wie docker image rm. Docker empfiehlt, docker rm mit den richtigen Unterbefehlen zu verwenden.
docker image ls
docker images
Wir haben die gleiche Ausgabe.
Bis jetzt hast du jeweils ein unbenutztes Image entfernt. Was ist, wenn du zwei oder mehr ungenutzte Images gleichzeitig entfernen willst?
Hier kommt der Befehl prune ins Spiel. Mit dem Befehl prune kannst du alle ungenutzten Bilder auf einmal von deinem Host entfernen. Du kannst den prune-Befehl verwenden, um alle herabhängenden Bilder, alle ungenutzten Bilder oder eine Kombination aus beidem zu entfernen. Dangling-Images sind die Images, die nicht mit mindestens einem Container verbunden sind.
8. Führe den Befehl docker image prune aus, um alle unbenutzten/hängenden Images aus deinem System zu entfernen.
docker image prune
Wie du siehst, hat der prune-Befehl alle unbenutzten Abbilder und ihre Ebenen von deinem Host entfernt und dabei eine Menge Speicherplatz gespart.
9. Listet die Bilder auf eurem Host erneut auf, um zu überprüfen, ob die Bilder wirklich weg sind. Jetzt weißt du, wie du Bilder auf deinem Host auflisten, entfernen und löschen kannst. Diese grundlegenden Befehle werden dir helfen, dein System sauber und organisiert zu halten.
docker image ls
Docker-Images inspizieren
Vielleicht denkst du bei Docker-Images und Containern an geheimnisvolle schwarze Kästen. Du fragst dich, was für ein Zauber in ihnen vor sich geht. In diesem Abschnitt klären wir die Mystik auf, indem wir uns ansehen, was in einem Docker-Image steckt und wie du diese Informationen zu deinem Vorteil nutzen kannst.
1. Docker bietet eine Möglichkeit, den Inhalt eines Images zu untersuchen. Der Befehl docker inspect nimmt einen Pfad zu einem Image auf und gibt eine Fülle von Informationen darüber aus, wie im folgenden Beispiel zu sehen ist.
docker inspect ubuntu
Wie unten zu sehen ist, enthält die Ausgabe des obigen Befehls eine Menge an Informationen. Du siehst hier alle Informationen in einem Format namens JSON-Array.
Die Informationen in der Ausgabe werden wie ein Key-Value-Store dargestellt. Du kannst ein Linux-Tool wie die Pipe (|) verwenden, um die Ausgabe nach einem bestimmten Schlüsselwort zu durchsuchen. Dann kannst du die über die Pipe ausgegebenen Daten für jeden beliebigen Zweck verwenden. Die folgenden Beispiele zeigen, wie du das machen kannst.
2. Führe den folgenden Befehl aus, um die Ausgabe des Befehls docker inspect in einer Datei namens image-inspect.txt zu speichern.
docker image inspect ubuntu > image-inspect.txt
3. Öffne dann die Datei mit einem Editor deiner Wahl und prüfe ihren Inhalt.
sudo nano image-inspect.txt
Die Ausgabe des Befehls docker inspect enthält eine Fülle von Informationen über ein Image, wie unten dargestellt. Im Editor kannst du ganz einfach navigieren, z. B. durch Hoch- und Runterscrollen, um verschiedene Informationen einzusehen. Du kannst die Informationen bearbeiten, wenn du willst.
Du kannst auch das Argument –format verwenden, um die Ausgabe auf eine bestimmte Weise zu formatieren.
4. Um zum Beispiel die ID des Ubuntu-Images auszudrucken, kannst du den folgenden Befehl verwenden.
docker image inspect ubuntu --format='{{.ID}}'
5. Liste das Image auf, um die Image-ID zu überprüfen.
docker image ls
6. Führe den folgenden Befehl aus, um die Ausgabe des Befehls docker inspect an den Befehl more weiterzuleiten. So kannst du die Ausgabe paginieren, um alle darin enthaltenen Informationen zu sehen.
docker image inspect ubuntu | more
Dieses Mal siehst du den Hostnamen(b32714f341a6) im Abschnitt ContainerConfig, wie unten dargestellt.
7. Was, wenn du nur den Wert des Hostnamens(b32714f341a6) haben möchtest? Das kannst du erreichen, indem du den folgenden Befehl ausführst.
docker image inspect ubuntu --format='{{.ContainerConfig.Hostname}}'
Wie du siehst, kannst du den Befehl docker inspect mit Linux-Tools verwenden, um weitere Filter zu setzen. Zum Beispiel einen Bereich. Zum Beispiel, um alle IP-Adressen im Bereich 192.168.0.0/16 aufzulisten. Und du kannst ihn sogar mit anderen Skript-Tools kombinieren, um noch mehr coole Sachen zu machen.
Docker-Tags verwenden
Wenn du weiter mit Docker-Images arbeitest, wirst du anfangen, Tags zu verwenden. Mit Tags kannst du deine Images leicht identifizieren und verwalten. Du kannst zum Beispiel für jede Umgebung, in der ein Image verwendet wird, oder für jeden Kunden, für den ein Image verwendet wird, ein Tag erstellen. So kannst du leicht das gewünschte Bild finden und nachverfolgen, welche Bilder für welche Zwecke verwendet wurden.
Die Syntax zum Hinzufügen eines Tags zu einem Bild lautet wie folgt:
docker tag SOURCE_IMAGE[:TAG] TARGET_IMAGE[:TAG]
Dein Tag kann eine beliebige gültige ASCII-Zeichenkette sein und kann Klein- und Großbuchstaben, Ziffern, Unterstriche, Punkte und Bindestriche enthalten. Er darf nicht mit einem Punkt oder einem Bindestrich beginnen und darf nicht länger als 128 Zeichen sein. Schauen wir uns ein Beispiel an.
1. Um ein Bild mit einem Tag zu versehen, müssen wir zunächst den Namen oder die ID des Bildes kennen, das wir taggen wollen. Wir können alle verfügbaren Bilder in unserem System auflisten, indem wir den folgenden Befehl ausführen:
docker image ls
2. Führe nun den folgenden Befehl aus, um das Tag „myubuntu“ zu dem Bild hinzuzufügen.
docker tag ubuntu:latest ubuntu:myubuntu
3. Wenn wir nun den Befehl docker image ls erneut ausführen, können wir sehen, dass unser Image mit dem Tag „myubuntu“ versehen wurde.
Beachte, dass die Tags nur Aliasnamen sind. Das bedeutet, dass ein Image mehrere Tags haben kann, die aber alle auf dasselbe Quellimage verweisen. Du kannst also jedes beliebige Tag verwenden, solange es für dich Sinn macht. Und es ist eine gute Idee, Tags hinzuzufügen, wenn du Bilder erstellst, damit du später leichter den Überblick behalten kannst.
4. Schauen wir uns ein weiteres Beispiel an. Angenommen, wir wollen ein Bild von Ubuntu mit dem Tag „original“ erstellen. Das können wir mit dem folgenden Befehl erreichen:
docker tag myubuntu:latest myubuntu:original
Mit dem obigen Befehl wird ein Image mit dem Tag „original“ erstellt, das auf dem Image mit dem Tag „latest“ basiert. Wir haben jetzt zwei myubuntu-Images: eines mit dem Tag “ latest“ und eines mit dem Tag “ original“, die aber beide auf dieselbe Quell-Image-ID(2b4cba85892a) verweisen.
Arbeiten mit Docker-Registries
Nachdem wir nun wissen, was Docker-Images sind, wollen wir uns die Arbeit mit Registries ansehen. Docker Hub ist die beliebteste öffentliche Registrierung, aber es gibt auch andere Möglichkeiten.
Docker Hub ist eine öffentliche Registrierungsstelle, die sowohl für private als auch für kommerzielle Zwecke kostenlos genutzt werden kann. Sie bietet eine große Auswahl an Images und du kannst auch deine eigenen Images erstellen und sie mit anderen teilen. Um Docker Hub zu nutzen, musst du einfach ein Konto erstellen und dann den Docker-Client installieren. Dann kannst du den Befehl docker search verwenden, um Images zu finden, und den Befehl docker pull, um sie herunterzuladen.
Bis jetzt haben wir mit dem Ubuntu-Image gearbeitet, das auf Docker Hub, einer öffentlichen Docker-Registry, verfügbar ist. Du kannst aber auch eine private Registry erstellen, um deine Images zu speichern.
Eine private Docker-Registry bereitstellen
Es gibt ein paar Gründe, warum du eine private Registry verwenden möchtest:
- Um Images zu speichern, die nur für den internen Gebrauch bestimmt sind.Vielleicht hast du Images, die vertrauliche Informationen enthalten und du willst nicht, dass sie öffentlich zugänglich sind. Oder du willst nachverfolgen, welche Bilder in deiner Umgebung verwendet wurden, und möchtest nicht, dass andere sie ohne deine Erlaubnis herunterladen können.
- Du willst die Downloads von Images in deiner CI/CD-Verteilungspipeline beschleunigen, indem du sie lokal zwischenspeicherst. Deine eigene Registry zu betreiben und zu speichern, ist eine hervorragende Möglichkeit, sie mit deinem CI/CD-System zu verknüpfen und zu verbessern.
1. Prüfe, ob dein Docker-Host bereit ist, eine lokale Registry zu erstellen.
docker version
2. Führe den unten stehenden Befehl docker run aus, um eine lokale und private Registry einzurichten und zu betreiben. Wobei:
- -p 5000:5000 = Port 5000 auf dem Docker-Host auf Port 5000 auf dem Container abbilden
- –restart=always = sorgt dafür, dass der Container immer neu gestartet wird, wenn er ausfällt
- –name registry = Name deiner privaten Registry
- registry:2 = das Image, das für die Erstellung des Registry-Containers verwendet wird
docker run -d -p 5000:5000 --restart=always --name registry registry:2
3. Führe den folgenden Befehl aus, um alle laufenden Container auf deinem Docker-Host aufzulisten.
docker ps
Du wirst die folgende Ausgabe sehen. Diese Ausgabe zeigt an, dass der Registry-Container auf deinem Docker-Host läuft und in Betrieb ist. Die Schreibweise :::5000->5000/tcp ist eine Abkürzung, die den Port des Docker-Hosts auf den Port des Registry-Containers abbildet.
Nachdem wir nun unsere private Registry eingerichtet haben, schauen wir uns an, wie wir ihr Images hinzufügen können. Das folgende Beispiel zeigt, wie man das Ubuntu-Image zur Registry hinzufügt. Zuerst musst du das Image von Docker Hub auf deinen lokalen Host ziehen und ihm ein bestimmtes Tag geben. Dann schiebst du das neu getaggte Image in deine private Registry. Schließlich löschst du das Ubuntu-Image von deinem lokalen Host und ziehst das Image aus deiner privaten Registry, um es zu testen.
4. Führe den folgenden Befehl aus, um das Ubuntu-Image mit dem Tag 20.04 von Docker Hub auf deinen lokalen Rechner herunterzuladen.
docker image pull ubuntu:20.04
5. Als Nächstes führst du den folgenden Befehl aus, um das heruntergeladene Ubuntu-Image als „my-ubuntu“ zu markieren. Du kannst jedes beliebige Tag verwenden, aber es ist eine gute Idee, etwas zu verwenden, das für dein Unternehmen sinnvoll ist.
docker tag ubuntu:20.04 localhost:5000/my-ubuntu
6. Führe den folgenden Befehl aus, um das neu getaggte Image in deine private Registry auf dem Port localhost:5000 zu übertragen.
docker push localhost:5000/my-ubuntu
7. Führe den folgenden Befehl aus, um die lokal zwischengespeicherten Ubuntu-Images von deinem localhost zu löschen und deine private Registry zu testen.
docker image remove ubuntu:20.04 && docker image remove localhost:5000/my-ubuntu
8. Sobald die lokal zwischengespeicherten Ubuntu-Images entfernt wurden, kannst du den unten stehenden Befehl ausführen, um das Image aus deiner privaten Registry zu holen.
docker pull localhost:5000/my-ubuntu
9. Führe den folgenden Befehl aus, um alle Images auf deinem Docker-Host aufzulisten.
docker image ls
Du wirst sehen, dass das my-ubuntu-Image von deiner privaten Registry gezogen wurde (siehe unten). Diese Ausgabe bestätigt, dass das Image erfolgreich aus deiner privaten Registry gezogen wurde und dass deine private Registry korrekt funktioniert.
Pushing, Pulling und Signieren von Images
Docker bietet einige Kommandozeilen-Optionen zum Pushen, Ziehen und Suchen von Images. In diesem Abschnitt erfährst du, wie du diese Befehle verwendest, um deine Images in den Registries über die Kommandozeile auf deinem Host zu verwalten. In diesem Beispiel wird der Docker Hub verwendet, du kannst aber auch andere Registries verwenden.
1. Führe den Befehl docker login aus, um dich bei der Docker Hub-Registry anzumelden. Gib deinen Benutzernamen und dein Passwort ein, wenn du dazu aufgefordert wirst. Wenn du noch kein Docker Hub-Konto hast, kannst du es kostenlos unter https://hub.docker.com/ erstellen.
docker login
2. Sobald du eingeloggt bist, kannst du deine Images pushen. Angenommen, du möchtest das neueste Ubuntu-Image in den Docker Hub pushen. Du solltest dem Image auch einen aussagekräftigen Namen geben, damit du es in Zukunft leicht wiederfinden kannst. In diesem Beispiel wirst du das Image als howtoforge/ubuntu:latest taggen. Du kannst aber auch einen anderen Tag-Namen verwenden.
docker tag ubuntu:latest howtoforge/ubuntu:latest
docker push howtoforge/ubuntu:latest
3. öffnedeinen Webbrowser und navigiere zum Docker Hub. Dort siehst du dein Image.Dieses Repository wurde anhand deines Benutzernamens und des von dir verwendeten Tags erstellt. In diesem Beispiel ist das Repository howtoforge/ubuntu. Navigiere zur Registerkarte Tag und du wirst sehen, dass dein Tag erfolgreich angewendet wurde(latest).
4. Führe den folgenden Befehl aus, um das lokale Ubuntu-Image zu entfernen und den Pull-Vorgang zu testen.
docker image rm howtoforge/ubuntu
Listet die Images auf eurem System auf, um zu überprüfen, ob das Ubuntu-Image entfernt wurde.
docker image ls
5. Führe den unten stehenden Befehl aus, um das my-ubuntu-Image von deinem Docker Hub herunterzuladen.
docker pull howtoforge/ubuntu
6. Liste die Images auf deinem Host erneut auf, um zu überprüfen, ob das Ubuntu-Image entfernt wurde. Du solltest das my-ubuntu-Image auf deinem System sehen.
docker image ls
Während du mit Images arbeitest, möchtest du vielleicht nach bestimmten Images in den Docker-Registries suchen. Du kannst den Befehl docker search verwenden, um in Docker-Registries nach Images zu suchen.
7. Führe den Befehl docker search aus, um alle verfügbaren Optionen und Parameter zu sehen.
man docker search
Du solltest die folgende Ausgabe sehen. Du kannst hilfreiche Filteroptionen sehen wie:
- stars=: Filtere die Suchergebnisse nach der Anzahl der Sterne, die das Image auf Docker Hub hat. Damit kannst du die beliebtesten Images finden.
- is-automated=(true|false): filtert die Suchergebnisse, um automatisierte Builds ein- oder auszuschließen. Damit kannst du Images finden, die automatisierte Builds sind oder nicht.
- is-official=(true|false): filtert die Suchergebnisse, um offizielle Bilder einzuschließen oder auszuschließen. Damit kannst du Images finden, die von dem Unternehmen, das hinter dem Image steht, offiziell unterstützt werden. Zum Beispiel ist Ubuntu das offizielle Unternehmen hinter dem Ubuntu-Image. Nginx ist das offizielle Unternehmen, das hinter dem Nginx-Image steht. Du solltest nach Möglichkeit immer die offiziellen Images verwenden, da sie von dem Unternehmen getestet wurden und mit größerer Wahrscheinlichkeit stabil sind. Wenn du Probleme mit einem offiziellen Image hast, kannst du dich an das Unternehmen wenden, das das Image bereitstellt.
8. Führe zum Beispiel den Befehl docker search –filter=stars=4 ubuntu aus, um auf Docker Hub nach einem ubuntu-Image mit 4 oder mehr Sternen zu suchen.
docker search --filter=stars=4 ubuntu
9. Führe den folgenden Befehl aus, um nach einem offiziellen Ubuntu-Image zu suchen.
docker search --filter=is-official=true ubuntu
Die Ausgabe sollte eine Liste der Repositories sein, die das Ubuntu-Image enthalten und anzeigt, dass es ein offizielles Ubuntu-Image ist(OK), wie unten gezeigt.
10. Führe den folgenden Befehl aus, um nach einem Ubuntu-Image zu suchen, das mindestens 100 Sterne auf Docker Hub hat und ein offizielles Ubuntu-Image ist.
docker search --filter="stars=100" --filter=is-official=true ubuntu
Docker-Images sind eine großartige Möglichkeit, deinen Anwendungscode und deine Konfiguration zu speichern. Gleichzeitig kann sich aber auch eine Menge ungenutzter Images ansammeln, vor allem wenn du verschiedene Anwendungen testest oder unterschiedliche Konfigurationen ausprobierst. Es kann sein, dass du einige der Bilder in deinen Registern nicht mehr brauchst.
Du kannst ein Bild löschen, indem du zu dem Repository navigierst, das das Bild enthält, und auf die Schaltfläche Löschen klickst.
11. Navigiere zum Beispiel auf Docker Hub zum Repository howtoforge/ubuntu. Klicke auf Einstellung > Repository löschen. Bestätige, dass du das Repository löschen möchtest, indem du den Namen des Repositorys eingibst. Klicke auf Löschen.
Navigiere zurück zum Dashboard und du wirst sehen, dass das howtoforge/ubuntu-Repository jetzt zusammen mit dem ubuntu-Image gelöscht ist.
Fazit
Herzlichen Glückwunsch! Du hast nun das Ende des Artikels erreicht. Du solltest jetzt ein grundlegendes Verständnis von Docker-Images und der Arbeit mit ihnen haben. Wenn du mehr über Docker erfahren möchtest, empfehlen wir dir, die offizielle Docker-Dokumentation zu lesen, in der du weitere Informationen zu Themen wie:
- Dockerdateien
- Networking
- Volumes
- Dienste
- Schwarm-Modus