Einführung
Docker ist eine Anwendung, die den Prozess der Verwaltung von Anwendungsprozessen in Containern vereinfacht. Container ermöglichen es Ihnen, Ihre Anwendungen in ressourcenisolierten Prozessen auszuführen. Sie ähneln virtuellen Maschinen, aber Container sind portabler, ressourcenschonender und abhängiger vom Host-Betriebssystem.
Für eine ausführliche Einführung in die verschiedenen Komponenten eines Docker-Containers, lesen Sie Das Docker-Ökosystem: Eine Einführung in die gängigen Komponenten.
In diesem Tutorial werden Sie Docker Community Edition (CE) unter Ubuntu 22.04 installieren und verwenden. Sie werden Docker selbst installieren, mit Containern und Abbildern arbeiten und ein Abbild in ein Docker-Repository hochladen.
Vereinfachen Sie das Bereitstellen von Anwendungen mit DigitalOcean App Platform. Bereitstellung direkt von GitHub in wenigen Minuten.
Voraussetzungen
Um diesem Tutorial zu folgen, benötigen Sie Folgendes:
- Ein Ubuntu 22.04 Server, der gemäß dem Leitfaden zur Einrichtung eines Ubuntu 22.04 Servers eingerichtet wurde, einschließlich eines
sudo
-Benutzers und einer Firewall. - Ein Konto auf Docker Hub, falls Sie eigene Abbilder erstellen und auf Docker Hub hochladen möchten, wie in den Schritten 7 und 8 gezeigt.
Schritt 1 — Installation von Docker
Das Docker-Installationspaket, das im offiziellen Ubuntu-Repository verfügbar ist, ist möglicherweise nicht die neueste Version. Um sicherzustellen, dass wir die neueste Version erhalten, installieren wir Docker aus dem offiziellen Docker-Repository. Dazu fügen wir eine neue Paketquelle hinzu, fügen den GPG-Schlüssel von Docker hinzu, um sicherzustellen, dass die Downloads gültig sind, und installieren dann das Paket.
Zuerst aktualisieren Sie Ihre vorhandene Liste von Paketen:
Installieren Sie dann ein paar Voraussetzungspakete, die apt
ermöglichen, Pakete über HTTPS zu verwenden:
Fügen Sie dann den GPG-Schlüssel für das offizielle Docker-Repository Ihrem System hinzu:
Fügen Sie das Docker-Repository den APT-Quellen hinzu:
Aktualisieren Sie erneut Ihre vorhandene Liste von Paketen, damit die Ergänzung erkannt wird:
Stellen Sie sicher, dass Sie aus dem Docker-Repository installieren, anstelle des standardmäßigen Ubuntu-Repositorys:
Sie sehen eine Ausgabe wie diese, obwohl die Versionsnummer für Docker unterschiedlich sein kann:
docker-ce:
Installed: (none)
Candidate: 5:20.10.14~3-0~ubuntu-jammy
Version table:
5:20.10.14~3-0~ubuntu-jammy 500
500 https://download.docker.com/linux/ubuntu jammy/stable amd64 Packages
5:20.10.13~3-0~ubuntu-jammy 500
500 https://download.docker.com/linux/ubuntu jammy/stable amd64 Packages
Beachten Sie, dass docker-ce
nicht installiert ist, aber der Kandidat für die Installation stammt aus dem Docker-Repository für Ubuntu 22.04 (jammy
).
Zum Schluss installieren Sie Docker:
Docker sollte jetzt installiert sein, der Daemon gestartet sein und der Prozess aktiviert sein, um beim Booten zu starten. Überprüfen Sie, ob er läuft:
Die Ausgabe sollte ähnlich wie folgt sein und zeigen, dass der Dienst aktiv und ausgeführt wird:
Output● docker.service - Docker Application Container Engine
Loaded: loaded (/lib/systemd/system/docker.service; enabled; vendor preset: enabled)
Active: active (running) since Fri 2022-04-01 21:30:25 UTC; 22s ago
TriggeredBy: ● docker.socket
Docs: https://docs.docker.com
Main PID: 7854 (dockerd)
Tasks: 7
Memory: 38.3M
CPU: 340ms
CGroup: /system.slice/docker.service
└─7854 /usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock
Die Installation von Docker bietet Ihnen nicht nur den Docker-Dienst (Daemon), sondern auch das docker
-Befehlszeilenprogramm oder den Docker-Client. Wir werden später in diesem Tutorial erkunden, wie man den docker
-Befehl verwendet.
Schritt 2 — Ausführen des Docker-Befehls ohne Sudo (Optional)
Standardmäßig kann der docker
-Befehl nur vom Benutzer root oder von einem Benutzer in der docker-Gruppe ausgeführt werden, die während des Installationsprozesses von Docker automatisch erstellt wird. Wenn Sie versuchen, den docker
-Befehl ohne vorangestelltes sudo
oder ohne Mitglied der docker-Gruppe auszuführen, erhalten Sie eine Ausgabe wie diese:
Outputdocker: Cannot connect to the Docker daemon. Is the docker daemon running on this host?.
See 'docker run --help'.
Wenn Sie vermeiden möchten, bei jedem Ausführen des docker
-Befehls sudo
einzugeben, fügen Sie Ihren Benutzernamen der docker
-Gruppe hinzu:
Um die neue Gruppenmitgliedschaft anzuwenden, melden Sie sich vom Server ab und wieder an oder geben Sie folgendes ein:
Sie werden aufgefordert, das Passwort Ihres Benutzers einzugeben, um fortzufahren.
Bestätigen Sie, dass Ihr Benutzer jetzt zur docker-Gruppe hinzugefügt wurde, indem Sie eingeben:
Outputsammy sudo docker
Wenn Sie einen Benutzer zur docker
-Gruppe hinzufügen müssen, als den Sie nicht angemeldet sind, geben Sie den Benutzernamen explizit an, indem Sie verwenden:
Der Rest dieses Artikels setzt voraus, dass Sie den docker
-Befehl als Benutzer in der docker-Gruppe ausführen. Wenn Sie dies nicht tun möchten, fügen Sie den Befehlen bitte sudo
voran.
Lassen Sie uns als Nächstes den docker
-Befehl erkunden.
Schritt 3 — Verwenden des Docker-Befehls
Die Verwendung von docker
besteht darin, ihm eine Kette von Optionen und Befehlen sowie Argumente zu übergeben. Die Syntax hat diese Form:
Um alle verfügbaren Unterbefehle anzuzeigen, geben Sie ein:
Ab Docker-Version 20.10.14 umfasst die vollständige Liste der verfügbaren Unterbefehle:
Output attach Attach local standard input, output, and error streams to a running container
build Build an image from a Dockerfile
commit Create a new image from a container's changes
cp Copy files/folders between a container and the local filesystem
create Create a new container
diff Inspect changes to files or directories on a container's filesystem
events Get real time events from the server
exec Run a command in a running container
export Export a container's filesystem as a tar archive
history Show the history of an image
images List images
import Import the contents from a tarball to create a filesystem image
info Display system-wide information
inspect Return low-level information on Docker objects
kill Kill one or more running containers
load Load an image from a tar archive or STDIN
login Log in to a Docker registry
logout Log out from a Docker registry
logs Fetch the logs of a container
pause Pause all processes within one or more containers
port List port mappings or a specific mapping for the container
ps List containers
pull Pull an image or a repository from a registry
push Push an image or a repository to a registry
rename Rename a container
restart Restart one or more containers
rm Remove one or more containers
rmi Remove one or more images
run Run a command in a new container
save Save one or more images to a tar archive (streamed to STDOUT by default)
search Search the Docker Hub for images
start Start one or more stopped containers
stats Display a live stream of container(s) resource usage statistics
stop Stop one or more running containers
tag Create a tag TARGET_IMAGE that refers to SOURCE_IMAGE
top Display the running processes of a container
unpause Unpause all processes within one or more containers
update Update configuration of one or more containers
version Show the Docker version information
wait Block until one or more containers stop, then print their exit codes
Um die verfügbaren Optionen für einen bestimmten Befehl anzuzeigen, geben Sie ein:
Um systemweite Informationen über Docker anzuzeigen, verwenden Sie:
Lassen Sie uns einige dieser Befehle erkunden. Wir werden mit Bildern beginnen.
Schritt 4 — Arbeiten mit Docker-Images
Docker-Container werden aus Docker-Images erstellt. Standardmäßig lädt Docker diese Images von Docker Hub, einem von Docker verwalteten Docker-Register, dem Unternehmen hinter dem Docker-Projekt. Jeder kann seine Docker-Images auf Docker Hub hosten, sodass die meisten Anwendungen und Linux-Distributionen, die Sie benötigen, dort gehostete Images haben werden.
Um zu überprüfen, ob Sie auf Docker Hub zugreifen und Images herunterladen können, geben Sie Folgendes ein:
Die Ausgabe zeigt an, dass Docker ordnungsgemäß funktioniert:
OutputUnable to find image 'hello-world:latest' locally
latest: Pulling from library/hello-world
2db29710123e: Pull complete
Digest: sha256:bfea6278a0a267fad2634554f4f0c6f31981eea41c553fdf5a83e95a41d40c38
Status: Downloaded newer image for hello-world:latest
Hello from Docker!
This message shows that your installation appears to be working correctly.
...
Anfangs konnte Docker das hello-world
-Image nicht lokal finden, daher wurde das Image von Docker Hub heruntergeladen, was das Standard-Repository ist. Sobald das Image heruntergeladen wurde, erstellte Docker einen Container aus dem Image, und die Anwendung innerhalb des Containers wurde ausgeführt und die Nachricht angezeigt.
Sie können nach verfügbaren Images auf Docker Hub suchen, indem Sie das docker
-Befehl mit dem search
-Unterbefehl verwenden. Um beispielsweise nach dem Ubuntu-Image zu suchen, geben Sie Folgendes ein:
Das Skript wird Docker Hub durchsuchen und eine Liste aller Images zurückgeben, deren Name mit dem Suchbegriff übereinstimmt. In diesem Fall wird die Ausgabe ähnlich wie folgt sein:
OutputNAME DESCRIPTION STARS OFFICIAL AUTOMATED
ubuntu Ubuntu is a Debian-based Linux operating sys… 14048 [OK]
websphere-liberty WebSphere Liberty multi-architecture images … 283 [OK]
ubuntu-upstart DEPRECATED, as is Upstart (find other proces… 112 [OK]
neurodebian NeuroDebian provides neuroscience research s… 88 [OK]
open-liberty Open Liberty multi-architecture images based… 51 [OK]
...
In der OFFIZIELLEN Spalte bedeutet OK, dass es sich um ein Bild handelt, das von dem Unternehmen hinter dem Projekt erstellt und unterstützt wird. Sobald Sie das Bild identifiziert haben, das Sie verwenden möchten, können Sie es mithilfe des pull
-Befehls auf Ihren Computer herunterladen.
Führen Sie den folgenden Befehl aus, um das offizielle ubuntu
-Bild auf Ihren Computer herunterzuladen:
Sie sehen die folgende Ausgabe:
OutputUsing default tag: latest
latest: Pulling from library/ubuntu
e0b25ef51634: Pull complete
Digest: sha256:9101220a875cee98b016668342c489ff0674f247f6ca20dfc91b91c0f28581ae
Status: Downloaded newer image for ubuntu:latest
docker.io/library/ubuntu:latest
Nachdem ein Bild heruntergeladen wurde, können Sie dann einen Container mithilfe des heruntergeladenen Bildes mit dem run
-Befehl ausführen. Wie Sie am Beispiel von hello-world
gesehen haben, wird, wenn ein Bild nicht heruntergeladen wurde und docker
mit dem run
-Befehl ausgeführt wird, der Docker-Client zuerst das Bild herunterladen und dann einen Container damit ausführen.
Um die Bilder anzuzeigen, die auf Ihrem Computer heruntergeladen wurden, geben Sie ein:
Die Ausgabe wird ähnlich aussehen wie folgt:
OutputREPOSITORY TAG IMAGE ID CREATED SIZE
ubuntu latest 1d622ef86b13 3 weeks ago 73.9MB
hello-world latest bf756fb1ae65 4 months ago 13.3kB
Wie Sie später in diesem Tutorial sehen werden, können Bilder, die Sie zum Ausführen von Containern verwenden, geändert und verwendet werden, um neue Bilder zu generieren, die dann auf Docker Hub oder anderen Docker-Registrierungen hochgeladen (gepushed ist der Fachbegriff) werden können.
Lassen Sie uns nun genauer betrachten, wie Container ausgeführt werden.
Schritt 5 — Ausführen eines Docker-Containers
Der hello-world
-Container, den Sie im vorherigen Schritt ausgeführt haben, ist ein Beispiel für einen Container, der ausgeführt wird und nach dem Aussenden einer Testnachricht beendet wird. Container können jedoch viel nützlicher sein als das und sie können interaktiv sein. Immerhin ähneln sie virtuellen Maschinen, sind jedoch ressourcenschonender.
Als Beispiel führen wir einen Container mit dem neuesten Ubuntu-Image aus. Die Kombination der Schalter -i und -t ermöglicht Ihnen den interaktiven Shell-Zugriff auf den Container:
Ihre Befehlszeile sollte sich ändern, um widerzuspiegeln, dass Sie nun innerhalb des Containers arbeiten, und sollte diese Form haben:
Outputroot@d9b100f2f636:/#
Beachten Sie die Container-ID in der Befehlszeile. In diesem Beispiel ist es d9b100f2f636
. Sie benötigen diese Container-ID später, um den Container zu identifizieren, wenn Sie ihn entfernen möchten.
Jetzt können Sie jeden Befehl innerhalb des Containers ausführen. Zum Beispiel aktualisieren wir die Paketdatenbank im Container. Sie müssen keinen Befehl mit sudo
prefixieren, da Sie innerhalb des Containers als Benutzer root arbeiten:
Führen Sie dann eine Anwendung darin aus. Lassen Sie uns Node.js installieren:
Dies installiert Node.js im Container aus dem offiziellen Ubuntu-Repository. Überprüfen Sie nach Abschluss der Installation, ob Node.js installiert ist:
Sie sehen die Versionsnummer in Ihrem Terminal angezeigt:
Outputv12.22.9
Alle Änderungen, die Sie innerhalb des Containers vornehmen, gelten nur für diesen Container.
Um den Container zu verlassen, geben Sie an der Eingabeaufforderung exit
ein.
Lassen Sie uns als nächstes die Verwaltung der Container auf unserem System betrachten.
Schritt 6 – Verwaltung von Docker-Containern
Nachdem Sie Docker eine Weile verwendet haben, haben Sie viele aktive (laufende) und inaktive Container auf Ihrem Computer. Um die aktiven anzuzeigen, verwenden Sie:
Sie werden eine Ausgabe sehen, die der folgenden ähnelt:
OutputCONTAINER ID IMAGE COMMAND CREATED
In diesem Tutorial haben Sie zwei Container gestartet; einen aus dem hello-world
-Image und einen anderen aus dem ubuntu
-Image. Beide Container laufen nicht mehr, existieren jedoch noch auf Ihrem System.
Um alle Container anzuzeigen – aktiv und inaktiv – führen Sie docker ps
mit dem -a
-Schalter aus:
Sie sehen eine Ausgabe ähnlich dieser:
OutputCONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
1c08a7a0d0e4 ubuntu "bash" About a minute ago Exited (0) 7 seconds ago dazzling_taussig
587000e49d53 hello-world "/hello" 5 minutes ago Exited (0) 5 minutes ago adoring_kowalevski
Um den neuesten Container anzuzeigen, den Sie erstellt haben, geben Sie ihm den -l
-Schalter:
OutputCONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
1c08a7a0d0e4 ubuntu "bash" 3 minutes ago Exited (0) 2 minutes ago dazzling_taussig
Um einen gestoppten Container zu starten, verwenden Sie docker start
, gefolgt von der Container-ID oder dem Namen des Containers. Lassen Sie uns den Container auf Basis von Ubuntu mit der ID 1c08a7a0d0e4
starten:
Der Container wird gestartet, und Sie können mit docker ps
seinen Status anzeigen:
OutputCONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
1c08a7a0d0e4 ubuntu "bash" 6 minutes ago Up 8 seconds dazzling_taussig
Um einen laufenden Container zu stoppen, verwenden Sie docker stop
, gefolgt von der Container-ID oder dem Namen. Diesmal verwenden wir den Namen, den Docker dem Container zugewiesen hat, nämlich dazzling_taussig
:
Sobald Sie sich entschieden haben, dass Sie einen Container nicht mehr benötigen, entfernen Sie ihn mit dem docker rm
Befehl, indem Sie entweder die Container-ID oder den Namen verwenden. Verwenden Sie den Befehl docker ps -a
, um die Container-ID oder den Namen für den Container zu finden, der mit dem hello-world
Image verbunden ist, und entfernen Sie ihn.
Sie können einen neuen Container starten und ihm einen Namen geben, indem Sie den Schalter --name
verwenden. Sie können auch den Schalter --rm
verwenden, um einen Container zu erstellen, der sich selbst entfernt, wenn er gestoppt wird. Weitere Informationen zu diesen Optionen und anderen finden Sie im Befehl docker run help
.
Container können in Images umgewandelt werden, die Sie verwenden können, um neue Container zu erstellen. Schauen wir uns an, wie das funktioniert.
Schritt 7 — Änderungen in einem Container in ein Docker-Image übernehmen
Wenn Sie ein Docker-Image starten, können Sie Dateien erstellen, ändern und löschen, genauso wie bei einer virtuellen Maschine. Die von Ihnen vorgenommenen Änderungen gelten nur für diesen Container. Sie können ihn starten und stoppen, aber sobald Sie ihn mit dem Befehl docker rm
zerstören, gehen die Änderungen für immer verloren.
In diesem Abschnitt wird erklärt, wie der Zustand eines Containers als neues Docker-Image gespeichert wird.
Nach der Installation von Node.js innerhalb des Ubuntu-Containers haben Sie jetzt einen Container, der auf einem Bild läuft, das sich jedoch vom Bild unterscheidet, das Sie zur Erstellung verwendet haben. Möglicherweise möchten Sie diesen Node.js-Container später als Basis für neue Bilder wiederverwenden.
Dann übernehmen Sie die Änderungen in eine neue Docker-Image-Instanz mit dem folgenden Befehl.
Der -m-Schalter dient der Commit-Nachricht, die Ihnen und anderen mitteilt, welche Änderungen Sie vorgenommen haben, während -a verwendet wird, um den Autor anzugeben. Die container_id
ist diejenige, die Sie früher im Tutorial notiert haben, als Sie die interaktive Docker-Sitzung gestartet haben. Sofern Sie keine zusätzlichen Repositories auf Docker Hub erstellt haben, ist das repository
normalerweise Ihr Docker-Hub-Benutzername.
Zum Beispiel, für den Benutzer sammy, mit der Container-ID von d9b100f2f636
, lautet der Befehl:
Wenn Sie ein Bild commiten, wird das neue Bild lokal auf Ihrem Computer gespeichert. Später in diesem Tutorial erfahren Sie, wie Sie ein Bild in ein Docker-Registry wie Docker Hub hochladen können, damit andere darauf zugreifen können.
Das Auflisten der Docker-Bilder zeigt erneut das neue Bild sowie das alte, von dem es abgeleitet wurde:
Sie werden eine Ausgabe wie diese sehen:
OutputREPOSITORY TAG IMAGE ID CREATED SIZE
sammy/ubuntu-nodejs latest 7c1f35226ca6 7 seconds ago 179MB
...
In diesem Beispiel ist ubuntu-nodejs
das neue Bild, das vom bestehenden ubuntu
-Bild von Docker Hub abgeleitet wurde. Der Größenunterschied spiegelt die vorgenommenen Änderungen wider. Und in diesem Beispiel wurde NodeJS installiert. Wenn Sie also das nächste Mal einen Container mit Ubuntu und vorinstalliertem NodeJS ausführen müssen, können Sie einfach das neue Bild verwenden.
Sie können auch Bilder aus einem Dockerfile
erstellen, mit dem Sie die Installation von Software in einem neuen Image automatisieren können. Dies liegt jedoch außerhalb des Umfangs dieses Tutorials.
Jetzt teilen wir das neue Image mit anderen, damit sie Container daraus erstellen können.
Schritt 8 — Docker-Images in ein Docker-Repository hochladen
Der nächste logische Schritt nach der Erstellung eines neuen Images aus einem vorhandenen Image besteht darin, es mit einigen Ihrer Freunde, der ganzen Welt auf Docker Hub oder einem anderen Docker-Registry, auf den Sie Zugriff haben, zu teilen. Um ein Bild auf Docker Hub oder einem anderen Docker-Registry zu pushen, müssen Sie dort ein Konto haben.
Um Ihr Bild zu pushen, melden Sie sich zunächst bei Docker Hub an.
Sie werden aufgefordert, sich mit Ihrem Docker-Hub-Passwort zu authentifizieren. Wenn Sie das richtige Passwort angegeben haben, sollte die Authentifizierung erfolgreich sein.
Hinweis: Wenn Ihr Docker-Registry-Benutzername von dem lokalen Benutzernamen abweicht, den Sie zum Erstellen des Images verwendet haben, müssen Sie Ihr Image mit Ihrem Registry-Benutzernamen taggen. Für das im letzten Schritt angegebene Beispiel würden Sie Folgendes eingeben:
Dann können Sie Ihr eigenes Bild mit folgendem Befehl pushen:
Um das ubuntu-nodejs
-Bild in das sammy-Repository zu pushen, wäre der Befehl:
Der Vorgang kann einige Zeit dauern, bis er abgeschlossen ist, da die Bilder hochgeladen werden, aber wenn er abgeschlossen ist, sieht die Ausgabe so aus:
OutputThe push refers to a repository [docker.io/sammy/ubuntu-nodejs]
e3fbbfb44187: Pushed
5f70bf18a086: Pushed
a3b5c80a4eba: Pushed
7f18b442972b: Pushed
3ce512daaf78: Pushed
7aae4540b42d: Pushed
...
Nachdem ein Bild in ein Repository gepusht wurde, sollte es auf dem Dashboard Ihres Kontos aufgelistet sein, wie im Bild unten gezeigt.
Wenn ein Push-Versuch zu einem Fehler dieser Art führt, haben Sie sich wahrscheinlich nicht angemeldet:
OutputThe push refers to a repository [docker.io/sammy/ubuntu-nodejs]
e3fbbfb44187: Preparing
5f70bf18a086: Preparing
a3b5c80a4eba: Preparing
7f18b442972b: Preparing
3ce512daaf78: Preparing
7aae4540b42d: Waiting
unauthorized: authentication required
Melden Sie sich mit docker login
an und wiederholen Sie den Push-Versuch. Überprüfen Sie dann, ob es auf Ihrer Docker Hub-Repositoryseite existiert.
Sie können jetzt docker pull sammy/ubuntu-nodejs
verwenden, um das Bild auf eine neue Maschine zu ziehen und es zu verwenden, um einen neuen Container auszuführen.
Fazit
In diesem Tutorial haben Sie Docker installiert, mit Bildern und Containern gearbeitet und ein modifiziertes Bild auf Docker Hub gepusht. Jetzt, da Sie die Grundlagen kennen, erkunden Sie die anderen Docker-Tutorials in der DigitalOcean-Community.
Source:
https://www.digitalocean.com/community/tutorials/how-to-install-and-use-docker-on-ubuntu-22-04