Ubuntu 26.04 / Eine Container-App mit persistenten Daten und eingeschränkten Ports ausführen
Container-Images liefern die Laufzeitumgebung, während persistente Daten und veröffentlichte Ports separate Entscheidungen erfordern. Diese Übung installiert Docker Engine und Compose auf einer dedizierten Ubuntu 26.04 VM und behält die Daten einer nur auf der Loopback-Adresse des Docker-Hosts erreichbaren Nginx-Anwendung über die Neuerstellung von Containern hinweg.
Wählen Sie die Installationsquelle und das Berechtigungsmodell
Auf einem Server, der bereits Docker, containerd oder Kubernetes verwendet, sollten Sie vor der Planung von Änderungen Container, Volumes, Repositories und Pakete inventarisieren. Entfernen Sie Pakete nicht blind oder mischen Sie keine Installationsmethoden. Das untenstehende Verfahren richtet sich an eine frische Ubuntu-VM; stoppen Sie, wenn docker.sources oder docker.asc bereits an den angegebenen Pfaden existiert.
Die Mitgliedschaft in der Docker-Gruppe und der Zugriff auf das Socket gewähren mächtige Host-Berechtigungen. Diese Lektion verwendet explizit sudo, anstatt das Socket für jeden Benutzer schreibbar zu machen oder jeden Benutzer zur Docker-Gruppe hinzuzufügen. Behandeln Sie die Ausführung von Images als eine privilegierte Vertrauensentscheidung.
Installation aus dem offiziellen Repository
Speichern Sie das vollständige Skript als ~/install-docker-lab.sh und führen Sie bash ~/install-docker-lab.sh aus. Es stoppt, bevor etwas geschrieben wird, wenn die Überprüfungen für die Version oder vorhandene Dateien fehlschlagen. Signed-By begrenzt den Repository-Schlüssel auf diese Quelle.
set -eu
. /etc/os-release
if [ "$ID" != ubuntu ] || [ "$VERSION_ID" != 26.04 ]; then
printf "This lab requires Ubuntu 26.04.\n" >&2
exit 1
fi
if [ -e /etc/apt/sources.list.d/docker.sources ] || [ -e /etc/apt/keyrings/docker.asc ]; then
printf "Inspect the existing Docker repository first.\n" >&2
exit 1
fi
sudo apt update
sudo apt install ca-certificates curl
sudo install -m 0755 -d /etc/apt/keyrings
sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc
sudo chmod a+r /etc/apt/keyrings/docker.asc
sudo tee /etc/apt/sources.list.d/docker.sources >/dev/null <<EOF
Types: deb
URIs: https://download.docker.com/linux/ubuntu
Suites: ${UBUNTU_CODENAME:-$VERSION_CODENAME}
Components: stable
Architectures: $(dpkg --print-architecture)
Signed-By: /etc/apt/keyrings/docker.asc
EOF
sudo apt update
sudo apt install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
sudo docker version
sudo docker compose version
sudo docker run --rm hello-world
Überprüfen Sie sowohl die Client-/Server-Versionen als auch die Erfolgsmeldung von Hello-World. Beheben Sie Paket-, Signatur- oder Netzwerkfehler, bevor Sie fortfahren. Notieren Sie die tatsächlich installierten Versionen; das Entfernen eines Repositories deinstalliert die Engine nicht und löscht ihre Daten nicht.
Behalten Sie das Nginx-Site-Konfigurationslabor auf Port 8080 und verwenden Sie den Host-Port 8081 für diesen Container, während der interne Port 80 beibehalten wird. Wenn 8081 belegt ist, prüfen Sie den Eigentümer mit ss/compose ps und ersetzen Sie konsequent einen anderen verifizierten Host-Port in Compose und curl.
Definieren Sie die Compose-App und das Volume
Erstellen Sie ein neues Verzeichnis ~/compose-lab und speichern Sie Folgendes darin als compose.yaml. Verwenden Sie zuerst ss -lnt, um zu prüfen, dass 127.0.0.1:8081 frei ist. Das Weglassen der Host-Adresse kann dazu führen, dass auf anderen Schnittstellen veröffentlicht wird, daher bindet dieses Labor explizit die Loopback-Schnittstelle.
services:
web:
image: nginx:stable-alpine
ports:
- "127.0.0.1:8081:80"
volumes:
- lab-html:/usr/share/nginx/html
restart: unless-stopped
logging:
driver: json-file
options:
max-size: "10m"
max-file: "3"
volumes:
lab-html:
lab-html ist ein benanntes Volume, das vom beschreibbaren Layer des Containers getrennt ist. Die Übung beginnt mit anfänglichem Inhalt und schreibt dann ihre eigene index.html. Der stable-alpine-Tag kann sich ändern; reproduzierbare Deployments benötigen einen getesteten Digest und einen Aktualisierungsprozess. Passen Sie die Beispiel-Loglimits an die Arbeitslast an.
Ausführen, neu erstellen und persistente Daten überprüfen
(
set -eu
cd ~/compose-lab
sudo docker compose config
sudo docker compose pull
sudo docker compose up -d
sudo docker compose ps
sudo docker compose logs --tail 30 web
)
Starten Sie die App, nachdem die Konfigurationsprüfung und der Bild-Download erfolgreich sind. Überprüfen Sie den Containerzustand und die Logs, und schreiben Sie dann den Laborinhalt unten. Überschreiben Sie keine Dateien in einem bestehenden Projekt oder Volume mit echten Daten.
(
set -eu
cd "$HOME/compose-lab"
sudo docker compose exec web sh -c 'printf "volume-lab\n" > /usr/share/nginx/html/index.html'
curl --fail http://127.0.0.1:8081/
sudo docker compose up -d --force-recreate
curl --fail http://127.0.0.1:8081/
sudo docker image inspect nginx:stable-alpine --format '{{json .RepoDigests}}'
)
Jeder Start-, Recreate- und Shutdown-Block wird vor dem Ausführen in ~/compose-lab geändert. Eine Verzeichnisänderung in Klammern bleibt nach Ende des Blocks nicht bestehen. Jeder Compose-Befehl muss denselben compose.yaml verwenden, um dasselbe Projekt und Volume anzusprechen. Die Volume-Lab-Antwort vor und nach der Recreate zeigt, dass die App dieselbe Volume-Datei liest. Dies beweist keine erfolgreiche Sicherung oder vollständige Anwendungsstabilität. Eine andere Maschine sollte diesen Loopback-veröffentlichten Port nicht erreichen; überprüfen Sie die tatsächlichen Bindungen mit ss und docker compose ps.
Unterscheiden Sie zwischen Stoppen und Löschen von Daten
(
set -eu
cd "$HOME/compose-lab"
sudo docker compose down
sudo docker volume ls
)
down entfernt die Container und Netzwerke dieses Projekts, während standardmäßig benannte Volumes beibehalten werden. Starten Sie erneut mit up -d, um die Antwort zu überprüfen. Verwenden Sie down -v oder volume prune nicht als Routine-Stoppbefehle: Sie können Daten löschen. Koordinieren Sie Anwendungswrites und testen Sie die Wiederherstellung an einem separaten Ort, wenn Sie Volumes sichern.




