====== Docker ====== ===== Grundlagen ===== Docker ist eine weitere Art der Virtualisierung von Applikationen. Der Vorteil besteht darin das ein Docker-Container alle Abhängigkeiten integriert hat. Somit ist einfach möglich eine aktuelle Version von MySQL zu betreiben obwohl im Repo von der genutzten Distribution noch veraltete Versionen verfügbar sind. Ebenso werden Ressourcen effizienter genutzt und die Dienste können auf einem Host isoliert voneinander betrieben werden. Bei einer VM war das Betriebssystem immer vorhanden und der Aufwand bzw. die genutzten Ressourcen standen in keinem Verhältnis. Ein Beispiel: Ein einzelner DLNA Server (Bereitstellen von Medien über DLNA) kann sicherlich von vielen Medien-Servern miterledigt werden (Emby, Plex, Jellyfin....). dies erfordert jedoch enorme Ressourcen und manchmal will man nur diese kleine Sache zur Vefügung stellen. Auf einem OS könnte sicherlich auch "minidlna" installiert werden was genau diesen einen Zweck erfüllt. Möchte man nun jedoch diese Dienste voneinander trennen ist ein separater Server oder eine VM wie man Kanonen auf Spatzen schiessen. Ein Docker-Container mit "minidlna" verbraucht sehr wenig Ressourcen und ist schnell aufgesetzt. Durch die Nutzung von Docker ist es hier auch möglich mal eben die Version zu wechseln, unabhängig von der Distribution. ===== Installation ===== [[https://docs.docker.com/engine/install/debian/|Install Docker Engine on Debian]] # Uninstall old versions for pkg in docker.io docker-doc docker-compose podman-docker containerd runc; do sudo apt-get remove $pkg; done # Install using the apt repository 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/debian/gpg -o /etc/apt/keyrings/docker.asc sudo chmod a+r /etc/apt/keyrings/docker.asc # Add the repository to Apt sources: echo \ "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/debian \ $(. /etc/os-release && echo "$VERSION_CODENAME") stable" | \ sudo tee /etc/apt/sources.list.d/docker.list > /dev/null sudo apt update # Install docker sudo apt install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin sudo systemctl start docker.service sudo systemctl enable docker.service [[https://docs.docker.com/compose/install/linux/|Install the Docker Compose plugin]] sudo apt install docker-compose-plugin [[https://docs.docker.com/engine/install/linux-postinstall/|Linux post-installation steps for Docker Engine]]: Auf Servern einen Extra-Benutzer für Docker einrichten und mit diesem dann arbeiten: sudo useradd -g docker -m -s /bin/bash docker sudo passwd docker sudo usermod -aG docker docker su - docker # Test docker run hello-world mkdir -p ~/projects Auf Workstations den Haupt-Benutzer in die Docker-Gruppe einfügen und mit diesem dann arbeiten: sudo usermod -aG docker mkdir -p ~/projects/docker ===== Befehle ===== Hier eine kleine Übersicht der Befehle, die am häufigsten im Alltag (besonders mit Docker Compose) genutzt werden. ==== Verwaltung von Stacks (Compose) ==== Diese Befehle werden im Verzeichnis der jeweiligen ''docker-compose.yml'' ausgeführt: # Stack starten (im Hintergrund) docker compose up -d # Stack stoppen und Container entfernen docker compose down # Einzelnen Service neu starten docker compose restart # Einzelnen Service aktualisieren (Image neu ziehen und Container neu erstellen) docker compose pull docker compose up -d --no-deps ==== Container-Status & Logs ==== # Alle laufenden Container anzeigen docker ps # Echtzeit-Logs eines Containers einsehen docker logs -f # Mit der Shell eines Containers verbinden docker exec -it /bin/bash # Falls Bash vorhanden docker exec -it sh # Falls nur Sh vorhanden (z.B. Alpine) # Ressourcenverbrauch (CPU, RAM, Netzwerk) in Echtzeit docker stats ==== Aufräumen & Speicherplatz ==== # Nicht mehr benötigte Images, Container und Netzwerke löschen docker system prune # Alles löschen (auch ungenutzte Volumes und alle nicht verwendeten Images) docker system prune -a --volumes # Übersicht über den Speicherverbrauch von Docker docker system df ==== Netzwerk & Volumes ==== # Netzwerke auflisten docker network ls # Volumes auflisten docker volume ls # Nicht genutzte Volumes entfernen (Vorsicht!) docker volume prune ===== Container für das Homelab ===== Auf den Beispielseiten sind die Container als docker-compose angegeben. Gestartet werden sie jeweils docker compose up -d ==== Beispiele ==== * [[server:docker:andreas_homelab:gotify|Gotify - Eigener Benachrichtigungsmanager]] * [[server:docker/mariadb|MariaDB - RDBMS (relationale Datenbank)]] * [[server:docker/nginx-proxy-manager|Nginx-Proxy-Manager - Reverse Proxy]] * [[server:docker/paperless|Paperless-NGX - Einfaches DMS für zu Hause]] * [[server:docker/pihole|Pi-Hole - Werbeblocker für zu Hause]] * [[server:docker/unifi|UniFi - UniFi Controller Software]] * [[server:docker/vaultwarden|Vaultwarden - Passwortmanager der zu Bitwarden kompatibel ist]] * [[server:docker:whats-up-docker|Whats-Up-Docker - Überwachen der Versionen von Containern]]