From 12b96f28a7128fb2cfcf5ba4d43e329c74c0cf54 Mon Sep 17 00:00:00 2001 From: Florian Hensel Date: Thu, 11 Dec 2025 17:31:03 +0100 Subject: [PATCH] =?UTF-8?q?docker=20hinzugef=C3=BCgt?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 6 +- mkdocs/docs/bonus/docker-grundlagen.md | 260 +++++++++++++++++++++++++ 2 files changed, 263 insertions(+), 3 deletions(-) create mode 100644 mkdocs/docs/bonus/docker-grundlagen.md diff --git a/README.md b/README.md index 7a106d8..1746b3f 100644 --- a/README.md +++ b/README.md @@ -16,7 +16,7 @@ Dieses Projekt enthält ein Bash-Skript und eine Umgebung zum automatischen Konv ## Nutzung ````bash Alle Markdown-Dateien in mkdocs/docs pdfen: -./mkdocs-to-pdf.sh +./mkdocs-complete.sh Einzelne Datei konvertieren: ./mkdocs-to-pdf.sh Linux_Unternehmen/nextcloud-ldap.md @@ -34,7 +34,7 @@ Mehrere Dateien gleichzeitig - LaTeX Template Datei `eisvogel.latex` im Projektverzeichnis ## Verzeichnisstruktur - +```` mkdocs/ ├── docs/ <- Markdown Quelldateien und Medien │ ├── Linux_Unternehmen/ @@ -43,7 +43,7 @@ mkdocs/ │ └── basics/ ├── mkdocs.yml <- MkDocs Konfigurationsdatei └── site/ <- Ergebnis von MkDocs Build (HTML, PDF) - +```` mkdocs-to-pdf.sh <- Bash Skript zur automatischen PDF-Erstellung eisvogel.latex <- LaTeX Vorlage für Pandoc PDF Export docker-compose.yml <- Containerdefintionen für MkDocs Umgebung diff --git a/mkdocs/docs/bonus/docker-grundlagen.md b/mkdocs/docs/bonus/docker-grundlagen.md new file mode 100644 index 0000000..6fec915 --- /dev/null +++ b/mkdocs/docs/bonus/docker-grundlagen.md @@ -0,0 +1,260 @@ +# Docker-Grundlagen +## Virtuelle Maschinen (VMs) vs. Container + +|Kriterium |Virtuelle Maschine (VM) |Container | +|-------------------|----------------------------------------------|------------------------------------| +|Isolation |Vollständige OS-Isolation (Hardware-Ebene) |Prozess-Isolation (OS-Ebene) | +|Ressourcenverbrauch|Hoch (eigenes OS pro VM) |Gering (teilt Host-OS-Kernel) | +|Startzeit |Minuten |Sekunden | +|Portabilität |Schwerer (große Images) |Leicht (kleine Images) | +|Anwendungsfall |Vollständige Systeme (z. B. Windows auf Linux)|Mikroservices, Web-Apps, Datenbanken| + +**Fazit**: Container sind ideal für schnelle, ressourcenschonende Bereitstellung von Anwendungen. +## Docker installieren + +[Immer aktuelles Setup anschauen](https://docs.docker.com/engine/install/ubuntu/) + +````bash +# Alte Docker-Versionen entfernen +sudo apt removes docker.io docker-compose docker-compose-v2 docker-doc podman-docker containerd runc +# Abhängigkeiten installieren +sudo apt update +sudo apt install -y ca-certificates curl gnupg + +# Docker-Repository hinzufügen +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 < Ausgabe: +```` +Hello from Docker! +This message shows that your installation appears to be working correctly. +... +```` +Tatsächlich erklärt der Container selbst was er getan hat. +* ````docker run````: Führt einen Container aus. +* ````hello-world````: Offizielles Test-Image von Docker Hub. + +## Eigenes Dockerfile für einen Webserver (Nginx) + +### Dockerfile +Erstellen Sie eine Datei namens ````Dockerfile```` mit folgendem Inhalt: +````dockerfile +# Basis-Image: Offizielles Nginx-Image +FROM nginx:latest + +# Standard-HTML-Seite ersetzen +COPY index.html /usr/share/nginx/html + +# Port 80 freigeben +EXPOSE 80 +```` +### HTML-Datei bereitstellen +Erstellen Sie eine Datei ````index.html```` im selben Verzeichnis: +````html + + + + Meisterkurs IT + + +

Willkommen zum Docker-Webserver!

+

Dieser Container läuft auf Port 80.

+ + +```` +### +Image bauen und Container starten +````bash +# Image aus dem Dockerfile bauen +docker build -t mein-nginx . + +# Container im Hintergrund starten und Port 8080 des Hosts auf Port 80 des Containers mappen +docker run -d -p 8080:80 --name mein-webserver mein-nginx +```` + +### Testen + +Öffnen Sie einen Browser und rufen Sie ````http://:8080```` auf. +Sie sollten die HTML-Seite sehen. + +## Docker Compose für BackupPC + +Warum Docker Compose? + +* Vereinfacht das Management mehrerer Container +* Definiert alle Dienste in einer YAML-Datei. +### Beispiel: backuppc/docker-compose.yml für BackupPC +compose-Dateien immer in einem Ordner! + +````yaml +services: + backuppc: + image: adferrand/backuppc + container_name: backuppc + restart: unless-stopped + ports: + - "8081:80" # Webinterface auf Port 8081 + volumes: + - /etc/localtime:/etc/localtime:ro # Uhrzeit vom Host + - /etc/timezone:/etc/timezone:ro # Zeitzone vom Host + - ./etc:/etc/backuppc # Einstellungen + - ./home:/home/backuppc # "Userdata" von backuppc. z.B. ssh-keys + - ./backups:/data/backuppc # Das Backupverzeichnis + environment: + - BACKUPC_WEB_USER=meisterkurs + - BACKUPC_WEB_PASSWORD=passw0rd# + - BACKUPPC_UUID=100 + - BACKUPPC_GUID=101 + +```` +### Projekt starten +````bash +# Docker Compose-Projekt starten +docker compose up -d + +# Status prüfen +docker compose ps + +# Log des Container anzeigen +docker compose logs +```` + +### Zugriff auf BackupPC + +Öffnen Sie ````http://:8081```` im Browser. +Anmeldung mit ````meisterkurs```` und ````passw0rd````. + +## Docker-Grundlagenbefehle + +### Container-Verwaltung +|Befehl |Beschreibung | +|--------------------------------|-----------------------------------------| +|docker ps |Liste aller laufenden Container anzeigen.| +|docker ps -a |Liste aller Container (auch gestoppte) anzeigen.| +|docker start |Einen gestoppten Container starten. | +|docker stop |Einen laufenden Container stoppen. | +|docker restart |Einen Container neu starten. | +|docker rm |Einen gestoppten Container entfernen. | +|docker rm -f |Einen Container erzwingen zu entfernen (auch laufende).| +|docker logs |Logs eines Containers anzeigen. | +|docker logs -f |Logs eines Containers live verfolgen. | +|docker exec -it bash|Eine interaktive Shell im laufenden Container öffnen.| +|docker inspect |Detaillierte Informationen zu einem Container anzeigen (z. B. IP, Volumes).| + +### Image-Verwaltung + +|Befehl |Beschreibung | +|------------------------|--------------------------------------------------------------| +|docker images |Liste aller lokalen Images anzeigen. | +|docker pull |Ein Image von Docker Hub herunterladen. | +|docker rmi |Ein Image entfernen. | +|docker rmi -f |Ein Image erzwingen zu entfernen. | +|docker build -t .|Ein Image aus einem Dockerfile im aktuellen Verzeichnis bauen.| +|docker push |Ein Image zu Docker Hub oder einer Registry hochladen. | + +### Docker Compose-Befehle + +|Befehl |Beschreibung | +|--------------------------------|---------------------------------------------------------------------------| +|docker compose up -d |Ein Projekt im Hintergrund starten (Detached-Modus). | +|docker compose up --build |Projekt starten und Images neu bauen (falls Änderungen im Dockerfile). | +|docker compose down |Ein Projekt komplett stoppen und entfernen (Container, Netzwerke, Volumes).| +|docker compose ps |Status aller Container im Projekt anzeigen. | +|docker compose logs |Logs aller Container im Projekt anzeigen. | +|docker compose logs -f |Logs aller Container live verfolgen. | +|docker compose logs |Logs eines bestimmten Services anzeigen. | +|docker compose restart |Einen bestimmten Service im Projekt neu starten. | +|docker compose build |Images für alle Services im Projekt neu bauen. | +|docker compose pull |Alle Images für das Projekt neu herunterladen. | +|docker compose config |Die Konfiguration des Projekts validieren (z. B. Syntax prüfen). | +|docker compose top |Prozesse in den Containern des Projekts anzeigen. | + +### Volumes und Netzwerke + +|Befehl |Beschreibung | +|---------------------------------|----------------------------------------------------------------| +|docker volume ls |Liste aller Docker-Volumes anzeigen. | +|docker volume inspect |Details zu einem Volume anzeigen (z. B. Mountpunkt). | +|docker volume rm |Ein Volume entfernen. | +|docker network ls |Liste aller Docker-Netzwerke anzeigen. | +|docker network inspect |Details zu einem Netzwerk anzeigen (z. B. verbundene Container).| + +### Praktische Beispiele: + +#### BackupPC-Projekt neu starten +````bash +# Projekt stoppen und entfernen +docker compose down + +# Projekt mit neuem Passwort starten +docker compose up -d +```` + +#### Logs von BackupPC live verfolgen +````bash +docker compose logs -f backuppc +```` + +#### Shell im BackupPC-Container öffnen +````bash +docker exec -it backuppc bash +```` + +#### BackupPC-Image neu bauen (nach Änderungen am Dockerfile) +````bash +docker compose build backuppc +docker compose up -d +```` +#### Alle Images und Container bereinigen +````bash +# Alle gestoppten Container entfernen +docker container prune + +# Alle nicht verwendeten Images entfernen +docker image prune -a + +# Alle nicht verwendeten Volumes entfernen +docker volume prune +```` +## Inhaltsverzeichnis + +[TOC] + + + + + + + + + + + +