====== 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 ===== Bitte immer nur die [[https://docs.docker.com/engine/install/|offizielle Installationsmethode von Docker]] verwenden: - Script herunterladen: curl -fsSL https://get.docker.com -o install-docker.sh - Inhalt überprüfen:cat install-docker.sh - Trockentest:sh install-docker.sh --dry-run - Script ausführen:sudo sh install-docker.sh - Docker starten:sudo systemctl start docker.service - Beim nächsten Systemstart starten:sudo systemctl enable docker.service [[https://docs.docker.com/engine/install/linux-postinstall/|Nacharbeiten]]: 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 Auf Workstations den Haupt-Benutzer in die Docker-Gruppe einfügen und mit diesem dann arbeiten: sudo usermod -aG docker Es ist ratsam für jedes Docker-Projekt einen Ordner anzulegen, unter dem dann wieder für jeden Service ein Unterverzeichnis mit einer ''docker-compose.yml'' angelegt wird. mkdir -p ~/projects/ mkdir -p ~/projects// Alternativ kann auch alles in ein "grosses" ''docker-compose.yml'' integriert werden. ===== Befehle ===== Hier eine kleine Übersicht der Befehle die am häufigsten genutzt werden ==== Allgemeines ==== # Laufende Container anzeigen lassen docker ps # # Mit Shell in Container verbinden docker exec -it sh docker exec -it /bin/bash # # Logs vom Container anzeigen docker logs -f # # Docker-Stack starten docker compose up -d # # Docker Container stoppen docker stop # # Docker Container löschen docker rm # # Generelles aufräumen docker system prune -a -f # ==== Netzwerk ==== # Netzwerk erstellen docker network create # # Netzwerk genauer ansehen docker network inspect # # Netzwerke ansehen docker network ls # ==== Volumes ==== Die Volumes werden standardmäßig unter ''/var/lib/docker/volumes'' automatisch angelegt # Volume erstellen docker volume create # # Volumes ansehen docker volume ls # # Volume löschen docker volume rm # ===== 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/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]]