So installieren und verwenden Sie Docker unter Debian 10

Einführung

Docker ist eine Anwendung, die die Verwaltung von Anwendungsprozessen in containers vereinfacht. Mit Containern können Sie Ihre Anwendungen in ressourcenisolierten Prozessen ausführen. Sie ähneln virtuellen Maschinen, sind jedoch portabler, ressourcenschonender und stärker vom Host-Betriebssystem abhängig.

Eine detaillierte Einführung in die verschiedenen Komponenten eines Docker-Containers finden Sie unter https://www.digitalocean.com/community/tutorials/the-docker-ecosystem-and-introduction-to-common-components[The Docker Ecosystem: An Einführung in allgemeine Komponenten.

In diesem Tutorial installieren und verwenden Sie Docker Community Edition (CE) unter Debian 10. Sie installieren Docker selbst, arbeiten mit Containern und Images und übertragen ein Image in ein Docker-Repository.

Voraussetzungen

Um diesem Tutorial zu folgen, benötigen Sie Folgendes:

Schritt 1 - Docker installieren

Das Docker-Installationspaket, das im offiziellen Debian-Repository verfügbar ist, ist möglicherweise nicht die neueste Version. Um sicherzustellen, dass wir die neueste Version erhalten, installieren wir Docker vom 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.

Aktualisieren Sie zunächst Ihre vorhandene Paketliste:

sudo apt update

Installieren Sie als Nächstes einige vorausgesetzte Pakete, mit denen "+ apt +" Pakete über HTTPS verwenden kann:

sudo apt install apt-transport-https ca-certificates curl gnupg2 software-properties-common

Fügen Sie dann den GPG-Schlüssel für das offizielle Docker-Repository zu Ihrem System hinzu:

curl -fsSL https://download.docker.com/linux/debian/gpg | sudo apt-key add -

Fügen Sie das Docker-Repository zu APT-Quellen hinzu:

sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/debian $(lsb_release -cs) stable"

Aktualisieren Sie als Nächstes die Paketdatenbank mit den Docker-Paketen aus dem neu hinzugefügten Repository:

sudo apt update

Stellen Sie sicher, dass Sie vom Docker-Repo anstelle des Standard-Debian-Repos installieren:

apt-cache policy docker-ce

Die Ausgabe sieht folgendermaßen aus, obwohl die Versionsnummer für Docker möglicherweise anders ist:

Ausgabe von apt-cache policy docker-ce

ocker-ce:
 Installed: (none)
 Candidate:
 Version table:
     500
       500 https://download.docker.com/linux/debian buster/stable amd64 Packages

Beachten Sie, dass + docker-ce + nicht installiert ist, der Kandidat für die Installation jedoch aus dem Docker-Repository für Debian 10 stammt (+ buster +).

Zum Schluss installieren Sie Docker:

sudo apt install docker-ce

Docker ist jetzt installiert, der Daemon wurde gestartet und der Prozess kann beim Booten gestartet werden. Überprüfen Sie, ob es ausgeführt wird:

sudo systemctl status docker

Die Ausgabe ähnelt der folgenden und zeigt, dass der Dienst aktiv ist und ausgeführt wird:

Output● docker.service - Docker Application Container Engine
  Loaded: loaded (/lib/systemd/system/docker.service; enabled; vendor preset: enabled)
  Active:  (running) since Mon 2019-07-08 15:11:19 UTC; 58s ago
    Docs: https://docs.docker.com
Main PID: 5709 (dockerd)
   Tasks: 8
  Memory: 31.6M
  CGroup: /system.slice/docker.service
          └─5709 /usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock

Wenn Sie Docker installieren, erhalten Sie nicht nur den Docker-Dienst (Daemon), sondern auch das Befehlszeilenprogramm "+ docker " oder den Docker-Client. Wir werden später in diesem Tutorial untersuchen, wie der Befehl " docker" verwendet wird.

Schritt 2 - Ausführen des Docker-Befehls ohne Sudo (optional)

Standardmäßig kann der Befehl "+ docker " nur vom Benutzer "* root *" oder von einem Benutzer der Gruppe "* docker *" ausgeführt werden, die während des Docker-Installationsprozesses automatisch erstellt wird. Wenn Sie versuchen, den Befehl " docker" ohne das Präfix "+ sudo" oder ohne die Gruppe "* docker *" auszuführen, erhalten Sie eine Ausgabe wie die folgende:

Outputdocker: Cannot connect to the Docker daemon. Is the docker daemon running on this host?.
See 'docker run --help'.

Wenn Sie vermeiden möchten, "+ sudo" einzugeben, wenn Sie den Befehl "+ docker" ausführen, fügen Sie Ihren Benutzernamen der Gruppe "+ docker +" hinzu:

sudo usermod -aG docker ${USER}

Melden Sie sich vom Server ab und wieder an, oder geben Sie Folgendes ein, um die neue Gruppenmitgliedschaft zu übernehmen:

su - ${USER}

Sie werden aufgefordert, das Kennwort Ihres Benutzers einzugeben, um fortzufahren.

Bestätigen Sie, dass Ihr Benutzer jetzt zur Gruppe * docker * hinzugefügt wurde, indem Sie Folgendes eingeben:

id -nG
Outputsammy sudo

Wenn Sie der Gruppe "+ docker +" einen Benutzer hinzufügen müssen, als der Sie nicht angemeldet sind, deklarieren Sie diesen Benutzernamen explizit mit:

sudo usermod -aG docker

In diesem Artikel wird davon ausgegangen, dass Sie den Befehl "+ docker " als Benutzer in der Gruppe "* docker *" ausführen. Wenn Sie dies nicht möchten, müssen Sie den Befehlen " sudo +" voranstellen.

Lassen Sie uns als nächstes den Befehl "+ docker +" untersuchen.

Schritt 3 - Verwenden des Docker-Befehls

Die Verwendung von + docker + besteht aus der Übergabe einer Kette von Optionen und Befehlen, gefolgt von Argumenten. Die Syntax hat folgende Form:

docker [option] [command] [arguments]

Geben Sie Folgendes ein, um alle verfügbaren Unterbefehle anzuzeigen:

docker

Ab Docker 18 enthält die vollständige Liste der verfügbaren Unterbefehle:

Outputattach      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

Geben Sie Folgendes ein, um die für einen bestimmten Befehl verfügbaren Optionen anzuzeigen:

docker  --help

Verwenden Sie zum Anzeigen systemweiter Informationen zu Docker Folgendes:

docker info

Sehen wir uns einige dieser Befehle an. Wir beginnen mit der Arbeit mit Bildern.

Schritt 4 - Arbeiten mit Docker-Bildern

Docker-Container werden aus Docker-Images erstellt. Standardmäßig ruft Docker diese Bilder von https://hub.docker.com [Docker Hub] ab, einer Docker-Registrierung, die von Docker verwaltet wird, dem Unternehmen, das hinter dem Docker-Projekt steht. Alle Benutzer können ihre Docker-Images in Docker Hub hosten. In den meisten Anwendungen und Linux-Distributionen, die Sie benötigen, werden also Images dort gehostet.

Geben Sie Folgendes ein, um zu überprüfen, ob Sie über Docker Hub auf Bilder zugreifen und diese herunterladen können:

docker run hello-world

Die Ausgabe zeigt an, dass Docker ordnungsgemäß funktioniert:

OutputUnable to find image 'hello-world:latest' locally
latest: Pulling from library/hello-world
1b930d010525: Pull complete
Digest: sha256:41a65640635299bab090f783209c1e3a3f11934cf7756b09cb2f1e02147c6ed8
Status: Downloaded newer image for hello-world:latest

Hello from Docker!
This message shows that your installation appears to be working correctly.
...

Docker konnte das + hello-world + - Image anfangs nicht lokal finden, daher hat es das Image von Docker Hub heruntergeladen, dem Standard-Repository. Sobald das Bild heruntergeladen wurde, erstellte Docker einen Container aus dem Bild und die Anwendung innerhalb des Containers wurde ausgeführt, wobei die Meldung angezeigt wurde.

Sie können nach Bildern suchen, die in Docker Hub verfügbar sind, indem Sie den Befehl + docker + mit dem Unterbefehl + search + verwenden. Um beispielsweise nach dem Ubuntu-Image zu suchen, geben Sie Folgendes ein:

docker search ubuntu

Das Skript durchsucht Docker Hub und gibt eine Liste aller Bilder zurück, deren Name mit der Suchzeichenfolge übereinstimmt. In diesem Fall sieht die Ausgabe ungefähr so ​​aus:

OutputNAME                                                      DESCRIPTION                                     STARS               OFFICIAL            AUTOMATED
ubuntu                                                    Ubuntu is a Debian-based Linux operating sys…   9704                [OK]
dorowu/ubuntu-desktop-lxde-vnc                            Docker image to provide HTML5 VNC interface …   319                                     [OK]
rastasheep/ubuntu-sshd                                    Dockerized SSH service, built on top of offi…   224                                     [OK]
consol/ubuntu-xfce-vnc                                    Ubuntu container with "headless" VNC session…   183                                     [OK]
ubuntu-upstart                                            Upstart is an event-based replacement for th…   99                  [OK]
ansible/ubuntu14.04-ansible                               Ubuntu 14.04 LTS with ansible                   97                                      [OK]
neurodebian                                               NeuroDebian provides neuroscience research s…   57                  [OK]
1and1internet/ubuntu-16-nginx-php-phpmyadmin-mysql-5      ubuntu-16-nginx-php-phpmyadmin-mysql-5          50                                      [OK]
ubuntu
...

In der Spalte * OFFICIAL * gibt * OK * ein Image an, das von der Firma hinter dem Projekt erstellt und unterstützt wird. Sobald Sie das Bild identifiziert haben, das Sie verwenden möchten, können Sie es mit dem Unterbefehl "+ pull +" auf Ihren Computer herunterladen.

Führen Sie den folgenden Befehl aus, um das offizielle "+ ubuntu" -Bild auf Ihren Computer herunterzuladen:

docker pull ubuntu

Sie sehen die folgende Ausgabe:

OutputUsing default tag: latest
latest: Pulling from library/ubuntu
5b7339215d1d: Pull complete
14ca88e9f672: Pull complete
a31c3b1caad4: Pull complete
b054a26005b7: Pull complete
Digest: sha256:9b1702dcfe32c873a770a32cfd306dd7fc1c4fd134adfb783db68defc8894b3c
Status: Downloaded newer image for ubuntu:latest

Nachdem ein Bild heruntergeladen wurde, können Sie mit dem Unterbefehl + run + einen Container mit dem heruntergeladenen Bild ausführen. Wie Sie im Beispiel "+ hallo-welt " gesehen haben, lädt der Docker-Client zuerst das Bild herunter und führt dann einen Container aus, der es verwendet, wenn ein Bild nicht heruntergeladen wurde, als " docker " mit dem Unterbefehl " run +" ausgeführt wurde .

Geben Sie Folgendes ein, um die auf Ihren Computer heruntergeladenen Bilder anzuzeigen:

docker images

Die Ausgabe sollte ungefähr so ​​aussehen:

OutputREPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
ubuntu              latest              4c108a37151f        2 weeks ago         64.2MB
hello-world         latest              fce289e99eb9        6 months ago        1.84kB

Wie Sie später in diesem Lernprogramm sehen werden, können Bilder, die Sie zum Ausführen von Containern verwenden, geändert und zum Generieren neuer Bilder verwendet werden, die dann in Docker Hub oder andere Docker-Registries hochgeladen werden können (pushed ist der Fachbegriff).

Schauen wir uns genauer an, wie Container ausgeführt werden.

Schritt 5 - Ausführen eines Docker-Containers

Der Container "+ hallo-welt +", den Sie im vorherigen Schritt ausgeführt haben, ist ein Beispiel für einen Container, der nach dem Senden einer Testnachricht ausgeführt und beendet wird. Container können viel nützlicher und interaktiver sein. Schließlich ähneln sie virtuellen Maschinen und sind nur ressourcenschonender.

Lassen Sie uns als Beispiel einen Container mit dem neuesten Ubuntu-Image ausführen. Die Kombination der Schalter * -i * und * -t * ermöglicht Ihnen den interaktiven Shell-Zugriff auf den Container:

docker run -it ubuntu

Ihre Eingabeaufforderung sollte sich ändern, um der Tatsache Rechnung zu tragen, dass Sie jetzt im Container arbeiten, und sollte die folgende Form annehmen:

Notieren Sie die Container-ID in der Eingabeaufforderung. 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 einen beliebigen Befehl im Container ausführen. Beispiel: Aktualisieren Sie die Paketdatenbank im Container. Sie müssen keinem Befehl das Präfix "+ sudo +" voranstellen, da Sie im Container als * root * -Benutzer arbeiten:

apt update

Installieren Sie dann eine beliebige Anwendung darin. Installieren wir Node.js:

apt install nodejs

Dadurch wird Node.js im Container aus dem offiziellen Ubuntu-Repository installiert. Stellen Sie nach Abschluss der Installation sicher, dass Node.js installiert ist:

node -v

Die Versionsnummer wird in Ihrem Terminal angezeigt:

Outputv8.10.0

Alle Änderungen, die Sie im Container vornehmen, gelten nur für diesen Container.

Geben Sie zum Verlassen des Containers an der Eingabeaufforderung "+ exit +" ein.

Schauen wir uns als nächstes die Verwaltung der Container auf unserem System an.

Schritt 6 - Docker-Container verwalten

Nach einer Weile der Verwendung von Docker befinden sich viele aktive (aktive) und inaktive Container auf Ihrem Computer. Um die * aktiven * anzuzeigen, verwenden Sie:

docker ps

Sie sehen eine Ausgabe ähnlich der folgenden:

OutputCONTAINER ID        IMAGE               COMMAND             CREATED

In diesem Lernprogramm haben Sie zwei Container gestartet. eines aus dem "+ hallo-welt" bild und eines aus dem "+ ubuntu" bild. Beide Container werden nicht mehr ausgeführt, sind jedoch weiterhin auf Ihrem System vorhanden.

Um alle Container anzuzeigen - aktiv und inaktiv, führen Sie "+ docker ps " mit dem Schalter " -a +" aus:

docker ps -a

Es wird eine Ausgabe ähnlich der folgenden angezeigt:

CONTAINER ID        IMAGE               COMMAND             CREATED              STATUS                      PORTS               NAMES
d42d0bbfbd35        ubuntu              "/bin/bash"         About a minute ago   Exited (0) 20 seconds ago                       friendly_volhard
0740844d024c        hello-world         "/hello"            3 minutes ago        Exited (0) 3 minutes ago                        elegant_neumann

Übergeben Sie den Schalter "+ -l +", um den zuletzt erstellten Container anzuzeigen:

docker ps -l
CONTAINER ID        IMAGE               COMMAND             CREATED              STATUS                      PORTS               NAMES
d42d0bbfbd35        ubuntu              "/bin/bash"         About a minute ago   Exited (0) 34 seconds ago                       friendly_volhard

Um einen gestoppten Container zu starten, verwenden Sie "+ Docker-Start ", gefolgt von der Container-ID oder dem Containernamen. Beginnen wir den Ubuntu-basierten Container mit der ID " d9b100f2f636 +":

docker start

Der Container wird gestartet und Sie können + docker ps + verwenden, um seinen Status zu sehen:

CONTAINER ID        IMAGE               COMMAND             CREATED              STATUS              PORTS               NAMES
d42d0bbfbd35        ubuntu              "/bin/bash"         About a minute ago   Up 8 seconds                            friendly_volhard

Um einen laufenden Container zu stoppen, verwenden Sie "+ docker stop ", gefolgt von der Container-ID oder dem Namen. Dieses Mal verwenden wir den Namen, den Docker dem Container zugewiesen hat: " friendly_volhard +":

docker stop

Sobald Sie entschieden haben, dass Sie einen Container nicht mehr benötigen, entfernen Sie ihn mit dem Befehl "+ docker rm ". Verwenden Sie dabei entweder die Container-ID oder den Namen. Verwenden Sie den Befehl ` docker ps -a `, um die Container-ID oder den Namen für den Container zu finden, der dem Image ` hello-world +` zugeordnet ist, und entfernen Sie es.

docker rm

Sie können einen neuen Container starten und ihm mit dem Schalter "+ - name " einen Namen geben. Sie können auch den Schalter " - rm " verwenden, um einen Container zu erstellen, der sich selbst entfernt, wenn er angehalten wird. Weitere Informationen zu diesen und anderen Optionen finden Sie im Befehl ` docker run help`.

Container können in Bilder umgewandelt werden, mit denen Sie neue Container erstellen können. Schauen wir uns an, wie das funktioniert.

Schritt 7 - Übertragen von Änderungen in einem Container in ein Docker-Image

Wenn Sie ein Docker-Image starten, können Sie wie bei einer virtuellen Maschine Dateien erstellen, ändern und löschen. Die von Ihnen vorgenommenen Änderungen gelten nur für diesen Container. Sie können es starten und stoppen, aber sobald Sie es mit dem Befehl + docker rm + zerstören, gehen die Änderungen endgültig verloren.

In diesem Abschnitt erfahren Sie, wie Sie den Status eines Containers als neues Docker-Image speichern.

Nach der Installation von Node.js im Ubuntu-Container wird jetzt ein Container von einem Image ausgeführt, der sich jedoch von dem Image unterscheidet, das Sie zum Erstellen verwendet haben. Möglicherweise möchten Sie diesen Container "Node.js" später als Grundlage für neue Bilder verwenden.

Übernehmen Sie dann die Änderungen mit dem folgenden Befehl in eine neue Docker-Image-Instanz.

docker commit -m "What you did to the image" -a "Author Name"  /

Der Schalter * -m * ist für die Festschreibungsmeldung vorgesehen, mit der Sie und andere wissen, welche Änderungen Sie vorgenommen haben, während mit * -a * der Autor angegeben wird. Die + container_id + ist diejenige, die Sie zuvor im Tutorial notiert haben, als Sie die interaktive Docker-Sitzung gestartet haben. Sofern Sie keine zusätzlichen Repositorys in Docker Hub erstellt haben, ist das Repository in der Regel Ihr Docker Hub-Benutzername.

Für den Benutzer * sammy * mit der Container-ID + d9b100f2f636 + wäre der Befehl beispielsweise:

docker commit -m "added Node.js" -a ""  /ubuntu-nodejs

Wenn Sie ein Bild festschreiben, wird das neue Bild lokal auf Ihrem Computer gespeichert. Später in diesem Lernprogramm erfahren Sie, wie Sie ein Image in eine Docker-Registrierung wie Docker Hub übertragen, damit andere Benutzer darauf zugreifen können.

Wenn Sie die Docker-Bilder erneut auflisten, wird sowohl das neue als auch das alte Bild angezeigt, von dem es abgeleitet wurde:

docker images

Die Ausgabe sieht folgendermaßen aus:

OutputREPOSITORY            TAG                 IMAGE ID            CREATED             SIZE
  latest              d441c62350b4        10 seconds ago      152MB
ubuntu                latest              4c108a37151f        2 weeks ago         64.2MB
hello-world           latest              fce289e99eb9        6 months ago        1.84kB

In diesem Beispiel ist "+ ubuntu-nodejs " das neue Image, das aus dem vorhandenen " ubuntu +" - Image von Docker Hub abgeleitet wurde. Der Größenunterschied spiegelt die vorgenommenen Änderungen wider. In diesem Beispiel wurde NodeJS installiert. Wenn Sie also das nächste Mal einen Container mit Ubuntu ausführen müssen, auf dem NodeJS vorinstalliert ist, können Sie einfach das neue Image verwenden.

Sie können auch Images aus einem Dockerfile erstellen, mit dem Sie die Installation von Software in einem neuen Image automatisieren können. Dies liegt jedoch außerhalb des Rahmens dieses Lernprogramms.

Lassen Sie uns nun das neue Image für andere freigeben, damit sie daraus Container erstellen können.

Schritt 8 - Docker-Images in ein Docker-Repository verschieben

Der nächste logische Schritt nach dem Erstellen eines neuen Images aus einem vorhandenen Image besteht darin, es für einige Ihrer Freunde, die ganze Welt in Docker Hub oder eine andere Docker-Registrierung, auf die Sie Zugriff haben, freizugeben. Um ein Image an Docker Hub oder eine andere Docker-Registrierung zu senden, müssen Sie dort über ein Konto verfügen.

In diesem Abschnitt erfahren Sie, wie Sie ein Docker-Image in Docker Hub übertragen. Informationen zum Erstellen Ihrer eigenen privaten Docker-Registrierung finden Sie unter https://www.digitalocean.com/community/tutorials/how-to-set-up-a-private-docker-registry-on-ubuntu-14-04 [So richten Sie eine private Docker-Registrierung unter Ubuntu 14.04 ein].

Melden Sie sich zuerst bei Docker Hub an, um Ihr Image zu pushen.

docker login -u

Sie werden aufgefordert, sich mit Ihrem Docker Hub-Passwort zu authentifizieren. Wenn Sie das richtige Kennwort angegeben haben, sollte die Authentifizierung erfolgreich sein.

Dann können Sie Ihr eigenes Bild mit dem folgenden Befehl verschieben:

docker push /

Um das Image "+ ubuntu-nodejs +" in das Repository "* sammy *" zu verschieben, lautet der Befehl:

docker push /

Der Vorgang kann einige Zeit in Anspruch nehmen, da die Bilder hochgeladen werden. Nach Abschluss sieht die Ausgabe jedoch folgendermaßen aus:

OutputThe push refers to a repository [docker.io//ubuntu-nodejs]
e3fbbfb44187: Pushed
5f70bf18a086: Pushed
a3b5c80a4eba: Pushed
7f18b442972b: Pushed
3ce512daaf78: Pushed
7aae4540b42d: Pushed

...

Nachdem Sie ein Bild in eine Registrierung verschoben haben, sollte es im Dashboard Ihres Kontos aufgeführt sein (siehe Abbildung unten).

image: https://assets.digitalocean.com/articles/docker_1804/ec2vX3Z.png [Neue Docker-Image-Liste in Docker Hub]

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//ubuntu-nodejs]
e3fbbfb44187: Preparing
5f70bf18a086: Preparing
a3b5c80a4eba: Preparing
7f18b442972b: Preparing
3ce512daaf78: Preparing
7aae4540b42d: Waiting
unauthorized: authentication required

Loggen Sie sich mit + docker login ein und wiederholen Sie den Push-Versuch. Stellen Sie dann sicher, dass es auf Ihrer Docker Hub-Repository-Seite vorhanden ist.

Sie können jetzt "+ docker pull / +" verwenden, um das Bild auf einen neuen Computer zu ziehen und einen neuen Container auszuführen.

Fazit

In diesem Lernprogramm haben Sie Docker installiert, mit Bildern und Containern gearbeitet und ein geändertes Bild an Docker Hub gesendet. Nachdem Sie die Grundlagen kennen, lesen Sie die other Docker tutorials in der DigitalOcean Community.