Inhaltsverzeichnis

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

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

# Test
sudo docker run hello-world

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

Auf Workstations den Haupt-Benutzer in die Docker-Gruppe einfügen und mit diesem dann arbeiten:

sudo usermod -aG docker <Benutzername>

Install the Docker Compose plugin

sudo apt install docker-compose-plugin

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/<Projektname>
mkdir -p ~/projects/<Projektname>/<Servicename>

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 <Container-Name> sh
docker exec -it <Container-Name> /bin/bash
#
# Logs vom Container anzeigen
docker logs -f <Container-Name>
#
# Docker-Stack starten
docker compose up -d
#
# Docker Container stoppen
docker stop <Container-Name> 
#
# Docker Container löschen
docker rm <Container-Name> 
#
# Generelles aufräumen
docker system prune -a -f
#

Netzwerk

# Netzwerk erstellen
docker network create <Netzwerk-Name>
#
# Netzwerk genauer ansehen
docker network inspect <Netzwerk-Name>
#
# Netzwerke ansehen
docker network ls
#

Volumes

Die Volumes werden standardmäßig unter /var/lib/docker/volumes automatisch angelegt

# Volume erstellen
docker volume create <Volume-Name>
#
# Volumes ansehen
docker volume ls
#
# Volume löschen
docker volume rm <Volume-Name>
#

Container für das Homelab

Auf den Beispielseiten sind die Container als docker-compose angegeben. Gestartet werden sie jeweils

docker compose up -d

Beispiele