Zum Inhalt springen

DietPi Docker Container: Erste Schritte und Vorbereitungen (Teil 2)

Was benötige ich für den Start?

DietPi, Docker und Container, dieses Tutorial soll Euch zeigen, wie Ihr Euren Raspberry für Docker und den Betrieb von Containern vorbereitet. Ich habe versucht das Tutorial so Einsteiger freundlich wie möglich zu gestalten. Solltet Ihr dennoch Fragen haben, könnt ihr die Gerne in den Kommentaren stellen. Ich freue mich auch über jegliches Feedback.

Hinweis:

Ich werde hier die von mir verwendeten Artikel auflisten und dazu Amazon Partner Links verwenden. Wer will darf mir gerne was gutes tun, wer nicht sucht selbst danach oder nutzt was anderes.

Hardware

  • Raspberry Pi4
  • Gehäuse mit Lüfter oder guten Kühlkörpern. Das Netzteil ist echt gut und macht seit knapp einem Jahr keine Probleme, setze es an 4 Raspberry ein, ebenso das Gehäuse.
  • Anker USB Adapter
  • 2 bis 4 USB3 Sticks Ich persönlich bevorzuge hier 256GB SanDisk oder Intenso oder entsprechende Platten mit eigener Stromversorgung
  • 1 16Gb bis 32GB Stick für das OS (Auch hier nutze ich einen Intenso oder SanDisk)

Vorbereitungen

Bootloader

Mit dem Pi Imager den Bootloader USB-Boot fähig machen. Ich bevorzuge den Boot von USB und das hier im Tutorial behandelte DietPi Docker Container Set läuft damit stabil.

Nach dem der Bootloader auf eine SD Card geflasht wurde muss der Raspberry einmal damit gestartet werden um den Bootloader ( EEPROM ) entsprechend zu updaten.

Raspberry Pi Image

Ich habe etliche Distributionen für den Raspberry Pi getestet und immer wieder gewechselt. Neben Raspbian OS in der Minimal Variante, ist DietPi meine Lieblings Distribution. Um die gewünschte Distribution auf den Raspberry zu bekommen gibt es Anwendungen die das Image auf den USB Stick oder die SD Karte bekommen. Zwei alternativen sind Balena Etcher oder Raspberry Pi Imager.

Nach dem das Image auf den USB Stick gebracht wurde den USB Stick einmal abziehen und wieder anstecken. Dann können noch ein paar Anpassungen an den Files dietpi.txt und cmdline.txt vorgenommen werden. Die wichtigsten Anpassungen findet ihr hier: How to do an automatice Base Installation at first boot DietPi

Anpassungen am OS

DietPi bietet durch den Installations Assistenten schon viele Möglichkeiten und ist daher echt einfach zu konfigurieren.
Wichtig sind für den Betrieb von Docker und den Nextcloud Komponenten folgende Punkte:

DietPi Docker Container Set Screenshot nach der Anmeldung
Diet Pi Screen direkt nach der Anmeldung
  • Static IP auf eth0. _Der Betrieb einer NextCloud über Wifi ist möglich aber nicht zu empfehlen._
  • Anpassung von Passwörtern Bitte nutzt nicht die Standard Passwörter sondern vergebt eigene. Dabei ist es nicht wichtig ob irgendwelche Sonderzeichen im Password sind sondern nur die Länge. Ich nutze für Root min 50 Zeichen und für die User min 35 Zeichen nach dem Schema[A-Za-z0-9].
  • Umstellen von Dropbear auf OpenSSH, ist für die aktuelle Konfiguration nicht unbedingt notwendig, solltet ihr aber auf OMV setzen wollen, dann geht nur OpenSSH.
  • Die Anleitung zu Installation und den Schritten danach für DietPi findet ihr in den DietPi Docs.

Hier geht auch noch mal mein Dank an das OpenSource Projekt DietPi raus und alle Entwickler und die Community Donate DietPi

Nach dem Ihr euch per SSH verbunden habt kümmern wir uns nun um die Docker Installation und die Anpassungen für Redis und Docker. Ich nutze hierfür immer das Docker eigene Repo, da dieses grundsätzlich aktueller ist als das von Debian oder anderen Distributionen.

Docker Repo einbinden und installieren

Alte Version deinstallieren
Wenn eine alte Version von Docker installiert ist sollte diese vorher deinstalliert werden. Bei einer neuen Installation kann auf diesen Schritt verzichtet werden.

Docker Installation

Danach wird das Repository eingebunden und die neueste Version oder Version nach Wunsch installiert.

sudo apt-get remove docker docker-engine \
  docker.io containerd runc

Wundert euch bitte nicht wenn hier eine Fehlermeldung kommt die einen Satz ähnlich diesem enthält: „Unable to locate package docker-engine“ dann ist bisher einfach keine Docker Version installiert gewesen.

Notwendige Pakete für das einbinden eines Repositorys:

sudo apt-get update
sudo apt-get install \
   ca-certificates \
   curl \
   gnupg \
   lsb-release

Einbinden des offiziellen Docker GPG Key:

curl -fsSL https://download.docker.com/linux/debian/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg

Repository einbinden:

echo \
  "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/debian \
  $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

Installation Docker Engine:

sudo apt-get update
sudo apt-get install docker-ce docker-ce-cli containerd.io

Docker-Compose installation

Ich habe mich für die Version 2 des Tools entschieden, da ich gerne Multi Container Docker Applikationen nutze. Für die Installation einfach folgendes ausführen.

Die aktuelle Version findet ihr auf Github Docker/Compose:

VERSION=[Your Version] #Your Version durch Eure Versionwahl ersetzen
sudo curl --create-dirs -SL https://github.com/docker/compose/releases/download/$VERSION/docker-compose-$(uname -s)-$(uname -m) -o /usr/local/lib/docker/cli-plugins/docker-compose

Kurz zu den Optionen die von curl verwendet werden.

–create-dirs sorgt dafür das die Verzeichnisse angelegt werden wenn nicht vorhanden
-S zeigt die Fehler genauer an ( mit -s gibt curl keine Meldungen aus)
-L folgt Redirections die durch 3XX https Statuscodes ausgegeben werden
-o gibt den Namen der lokalen Datei an die geschrieben werden soll

Weitere Details zu Version 2 von Docker-Compose findet ihr in den entsprechenden Docs.

Docker-Compose Cmdline Completion

Anleitung zur Installation der Cmdline Completion

Anmerkung: Anscheinend ist die Auto-Completion für docker-compose eingestellt worden.

DietPi Docker Container Set mit Docker-Compose Bash Tab Completion Beispiel
Docker-Compose Bash Tab Completion

Installation aus dem Paket

1. Gehe auf https://download.docker.com/linux/debian/dists/, wähle deine Debian Version aus und gehe in das richtige Verzeichnis (stable,nightly,test) und wähle dort `arm64` für den Raspberry Pi 4 aus. Lade das entsprechende `.deb` herunter.

2. Installation der Docker Engine. (Wähle deinen Download Pfad entsprechend.)

sudo dpkg -i /path/to/package.deb

Post Installation Schritte

1. Docker Grupper erstellen

sudo groupadd docker

2. User zur Grupper hinzufügen

sudo usermod -aG docker $USER

3. Unter Linux kannst du mit einem Relogin die Anpassungen aktivieren oder einfach   

newgrp docker

4. Überprüfe ob sich `docker` ohne `sudo` ausführen lässt.

docker run hello-world

Eine genaue und ausführliche Beschreibung findet ihr in den Docker Docs, Installation, Post-Installation-Steps.

Anpassungen am System

Da ich in meinem DietPi Docker Container Set auch Redis Container nutze und einzelnen Containern Limits für die Arbeitsspeicher Nutzung mitgebe sind noch 2 Anpassungen notwendig.
Zudem installiere ich noch ein paar Pakete die bei DietPi nicht bei der Erstinstallation mit kommen, für mich ist dies Optimal, da ich so genau bestimmen kann was ich installiere.

Fix für Redis in Docker Container

Die Datei `/etc/sysctl.conf` am Ende um folgende Zeile erweitern

# fix for redis running in docker
vm.overcommit_memory=1
Auszug aus der sysctl.conf aus dem DietPi Docker Container Set
Auszug aus der synctl.conf

Fix RAM-Limit für Docker Container

Standardmäßig ist Docker unter Linux nicht in der Lage RAM-Limits durchzusetzen, ob dies jedoch nicht schon unterstütz wird, kann man einfach mit dem Befehl `docker info` prüfen, steht dort am Ende `Warning: No Swap Limit support` ist dies noch nicht aktiviert.

In der Datei `/boot/cmdline.txt` muss folgendes stehen um dies auf dem Raspberry zu aktivieren.

cgroup_enable=memory cgroup_memory=1 swapaccount=1

Weitere Hilfen dazu findet ihr in den Docker Docs unter cgroup swap limit.

Zusätzliche Software

Ich habe noch ein paar zusätzliche Anwendungen auf meinen Pi installiert die mir persönlich dir Arbeit erleichtern. Ob und was ihr davon installiert überlasse ich euch für den Betrieb des der NextCloud sind sie nicht notwendig.

  • Git
  • GitHub
  • nano
  • mc
  • code (falls ihr wie ich per VSCode und Remote Verbindung arbeiten wollt)

LVM oder MDADM Raid einrichten

Für die als Storage angeschlossenen USB Sticks oder Festplatten habe ich mich für ein LVM Raid entschieden. Grundsätzlich ist aber auch ein MDADM Raid möglich.

Wichtig ist am Ende nur das ihr den Speicher entsprechend einbindet in Eurer Filesystem und über die Volumes eurer NextCloud Installation als Speicher zur Verfügung stellt.

Das Externe Einbinden von Speichern für die NextCloud werde ich sicher noch mal getrennt behandeln.

Fertig

Damit wäre Teil 1 DietPi Docker Container abgeschlossen und der Raspberry ist vorbereitet für die meisten Docker Container. Ich werde mir Mühe geben diese Artikel zu aktualisieren wenn ich Änderungen an meinen Containern vornehme oder sich an den Voraussetzungen was ändert.

Published inHowToRaspberryTechnikTutorial

2 Comments

Kommentare sind geschlossen.