Hier zeige ich kurz und schnell auf, wie man Docker Container anlegt, startet und editiert.
Anmerkung: Ich nutze Windows 10 als Host und arbeite mit Docker Desktop und der Linuxumgebung für Windows namens WSL bzw. WSL2. Diese Befehle funktionieren aber selbstverständlich auch auf nativen Linux-Systemen.
Ein Image herunterladen
Docker Container sind selbstständig lauffähige Instanzen von Images, die editiert, dupliziert, getestet, verschickt oder (später) wieder entfernt werden können. Um also einen Container zu starten, muss man zunächst ein Image anlegen oder herunterladen. Dazu kann man etwa das Repository von docker.com, das Docker Hub, benutzen. (Später wird noch gezeigt, wie man Images selbst erstellen kann.) Das Image verbleibt als Blaupause dabei unverändert.
Im Online Docker Hub gibt es tausende verschiedener Images. Ich nutze hier das thematisch naheliegende Image „docker/getting-started“.
Wir geben in der Kommandozeile ein:
cd ~ # ab ins Homeverzeichnis
docker pull docker/getting-started
Folgendes sollte zu sehen sein:

Um zu überprüfen, welche Images in unserem lokalen Repository vorhanden sind, nutzen wir das Kommando docker images.
docker images

Den ersten Container erstellen
Nur erstellen wir unseren ersten einfachen Container.
Da es anfangs zu Missverständnissen führen kann, weil man fälschlicherweise die Befehle run und start als Synonyme versteht, muss ich auf den entscheidenden Unterschied hinweisen: run = Abkürzung für create + start
Daher macht
docker create <image_id>
docker start <container_id>
dasselbe wie
docker run <image_id>
Der Befehl run erzeugt also einen neuen Container von einem Image und startet ihn automatisch.
Wir gehen einmal Schritt für Schritt vor.
docker create -p 80:80 docker/getting-started # Container wird angelegt, aber nicht gestartet
docker ps -a # Auflistung der vorhandenen Container

Mit „-p 80:80“ werden die Ports 80 von Container und Gastsystem miteinander verbunden, das ist wichtig, um gleich per Browser auf den Container zugreifen zu können. Wie gewünscht und erwartet wurde ein neuer Container angelegt. Nun wollen wir diesen starten. (Wir können Container über deren automatisch generierten Namen ansprechen.)
docker start eloquent_haslett # Namen kann man leichter nutzen als IDs
docker ps -a # Kontrolle

Die IP des Containers ermitteln
Um die IP des gestarteten Containers zu ermitteln, müssen wir uns zunächst per Shell verbinden. Dies geschieht mit dem Befehl docker exec. Bei dem von Docker bevorzugten Alpine Linux liegt die Shell auf dem Pfad /bin/sh – andere Linux nutzen z.B. /bin/bash.
docker exec -u 0 -it eloquent_haslett /bin/sh
hostname -i # IP des Containers ausgeben
exit # Verbindung wieder trennen

Exkurs: Die IP für Windows Systeme ermitteln
Sollte der Container auf einem Windows Host laufen, dann müssen wir die IP des Containers anders ermitteln.
Dazu müssen wir in der Windows-Konsole (nicht in Unix!) den Befehl ipconfig nutzen. Die IP findet sich dann unter dem Eintrag für den Ethernet-Adapter WSL.

Der erste Aufruf eines Containers über den Browser
Wir können jetzt entweder den Container über die Adresse localhost (für Windows) oder über die ermittelte IP aufrufen.
http://localhost/ bzw. http://172.24.64.1 bzw. http://172.17.0.2 (für Linux-Hosts)

Als Ergebnis erhalten wir das Tutorial, das auf dem Container läuft.
Somit hätten wir erfolgreich unseren ersten Container erstellt und gestartet.
Den Inhalt eines Containers manipulieren
Das ganze Handling mit Containern wäre nur der halbe Spaß, wenn man die Container nicht auch bearbeiten, sprich: Deren Inhalte nicht verändern könnte.
Dazu werden wir jetzt die Startseite des Tutorials ein wenig verändern.
Zuerst müssen wir uns wieder mit der Shell des Containers verbinden.
docker exec -u 0 -it eloquent_haslett /bin/sh
Auf dem Container-Linux ist leider nur vi als Editor installiert. Wer damit nicht klarkommt, sollte nano installieren.
apk update
apk add nano

Mit Hilfe des Befehls find finden wir heraus, wo sich die HTML-Dateien des Tutorials befinden.
find / -name index.html # Datei(en) suchen
nano /usr/share/nginx/html/tutorial/index.html # Datei editieren

Im Editor suchen wir jetzt mit der Tastenkombination STRG+w nach dem String „<h1>“. Die Überschrift besteht aus dem Text „Getting Started“ wir ändern ihn in „Hallo, Welt!“. Dann bitte speichern und den Editor wieder verlassen.
Rufen wir die Seite im Browser neue auf, sollte folgende Änderung zu sehen sein:

Und natürlich sollte die Änderung auch permanent sein und nicht nach Neustart verschwunden sein.
exit # um die Shell des Containers zu verlassen, falls noch nicht geschehen
docker stop eloquent_haslett # Container stoppen
docker start eloquent_haslett # Container wieder starten
Und wenn wieder die Seite im Browser aufgerufen wird, sehen wir weiterhin die Änderung.

Der umgekehrte Weg: Image aus Container erstellen
Wenn wir nun aus dem geänderten Container ein eigenes Image erstellen wollen (um es bspw. in das Repository von Docker hochzuladen oder um es Kunden zum Testen zugänglich zu machen), wird der Befehl docker commit genutzt.
docker commit <container_id> <neue_image_bezeichnung:tag>
Praktischerweise sollten wir den neuen Namen mit einem Tag versehen, um eine Versionierung zu simulieren. Für unseren Fall also Folgendes:
docker commit eloquent_haslett docker/getting_started:edited
docker images # Kontrolle

Wir sehen jetzt zwei Images, das ursprüngliche, welches wir aus dem Docker Hub geladen haben und das neue mit der Hallo-Welt-Überschrift im Tutorial.