# 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]