Docker Installation auf einem Raspberry Pi
Docker lässt sich mit ein paar Handgriffen auf einem Raspberry Pi installieren. Für die Docker-Administration bietet sich Portainer an.
Die Hardware
Die Raspberry Pi Hardware sollte für Docker nicht zu schwach ausgelegt werden. Für Docker-Vorhaben eignet sich ab besten ein Raspberry Pi 4 mit viel RAM.
Für diesen Testaufbau habe ich folgenden einen RPi verwendet:
Raspberry Pi 2 Model B Rev 1.1
Der Pi arbeitet ganz gut für die kleinen Container. Wenn aber größere Anwendungen auf dem Pi aufgesetzt werden sollen, ist die Hardware dann ggf. doch ein wenig zu schwach.
Die Auslastung mit htop ergibt folgendes Bild:
Vorbereitung
Bevor es an die Installation von Docker geht, ist das Betriebssystem auf den aktuellsten Stand zu bringen.
sudo apt update && sudo apt dist-upgrade && sudo apt-get clean
Follow Me❗️
Docker Engine Installieren
Die Installation von Docker auf einem Raspberry Pi funktioniert nur mit dem bereitgestellten Installationsskript.
curl -fsSL https://get.docker.com -o get-docker.sh sudo sh get-docker.sh
Anschließend holt das Skript die erforderlichen Pakete und installiert sie auf dem Pi.
# Executing docker install script, commit: b2e29ef7a9a89840d2333637f7d1900a83e7153f
+ sh -c apt-get update -qq >/dev/null
+ sh -c DEBIAN_FRONTEND=noninteractive apt-get install -y -qq apt-transport-https ca-certificates curl >/dev/null
+ sh -c mkdir -p /etc/apt/keyrings && chmod -R 0755 /etc/apt/keyrings
+ sh -c curl -fsSL "https://download.docker.com/linux/raspbian/gpg" | gpg --dearmor --yes -o /etc/apt/keyrings/docker.gpg
+ sh -c chmod a+r /etc/apt/keyrings/docker.gpg
+ sh -c echo "deb [arch=armhf signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/raspbian bullseye stable" > /etc/apt/sources.list.d/docker.list
+ sh -c apt-get update -qq >/dev/null
+ sh -c DEBIAN_FRONTEND=noninteractive apt-get install -y -qq --no-install-recommends docker-ce docker-ce-cli containerd.io docker-compose-plugin >/dev/null
Nach der Installation ist ggf. ein Neustart des Pis erforderlich.
sudo reboot
Nach dem Neustart können die Informationen von Docker angezeigt werden.
sudo docker info
Client:
Context: default
Debug Mode: false
Plugins:
app: Docker App (Docker Inc., v0.9.1-beta3)
buildx: Docker Buildx (Docker Inc., v0.8.2-docker)
compose: Docker Compose (Docker Inc., v2.6.0)
Server:
Containers: 0
Running: 0
Paused: 0
Stopped: 0
Images: 0
Server Version: 20.10.17
...
Die korrekte Installation von Docker auf dem Raspberry Pi lässt sich mit dem Container hello-world ganz einfach überprüfen.
sudo docker run hello-world
Funktioniert alles, sieht die Ausgabe auf der CLI wie folgt aus:
Unable to find image 'hello-world:latest' locally
latest: Pulling from library/hello-world
9b157615502d: Pull complete
Digest: sha256:7d246653d0511db2a6b2e0436cfd0e52ac8c066000264b3ce63331ac66dca625
Status: Downloaded newer image for hello-world:latest
Hello from Docker!
This message shows that your installation appears to be working correctly.
To generate this message, Docker took the following steps:
1. The Docker client contacted the Docker daemon.
2. The Docker daemon pulled the "hello-world" image from the Docker Hub.
(arm32v7)
3. The Docker daemon created a new container from that image which runs the
executable that produces the output you are currently reading.
4. The Docker daemon streamed that output to the Docker client, which sent it
to your terminal.
To try something more ambitious, you can run an Ubuntu container with:
$ docker run -it ubuntu bash
Share images, automate workflows, and more with a free Docker ID:
https://hub.docker.com/
For more examples and ideas, visit:
https://docs.docker.com/get-started/
Portainer installieren
Portainer ist ein grafisches Frontend für die Docker-Administration. Es greift dabei ausschließlich auf die Befehle zurück, die auch für die CLI gelten.
Für viele Operationen ist ein grafisches Tool wesentlich einfacher und übersichtlicher als die CLI. Also warum nicht auf so ein Tool zurückgreifen?
Es wird ein neues Laufwerk, bei Docker Volume, für Portainer erstellt.
sudo docker volume create portainer_data
# Die Ausgabe auf der CLI
portainer_data
Die Installation von Portainer erfolgt mit einem Docker Container.
sudo docker run -d -p 8000:8000 -p 9443:9443 --name portainer \
--restart=always \
-v /var/run/docker.sock:/var/run/docker.sock \
-v portainer_data:/data \
portainer/portainer-ce:2.9.3
Die Ausgabe auf der CLI sieht wie folgt aus:
Unable to find image 'portainer/portainer-ce:2.9.3' locally
2.9.3: Pulling from portainer/portainer-ce
0ea73420e2bb: Pull complete
c367f59be2e1: Pull complete
d5083ae559bb: Pull complete
Digest: sha256:84676dfce8ab328e51990797cceff5131c1ff63c3a73f5ebf1397cad9aa42e3c
Status: Downloaded newer image for portainer/portainer-ce:2.9.3
0112c8b638d2dc5291a4ee10c3abcf4f8cc54a85c3ecad5ad50939a223d632c2
https://docs.portainer.io/v/ce-2.9/start/install/server/docker/linux
Nach der Installation ist Portainer im Webbrowser unter der IP-Adresse des Pis und Port **8000** erreichbar.
https://192.168.178.33:9443
Klick auf "Get Startet".
Das wars! Portainer kann verwendet werden.
Portainer Overview
Der Container hello-world
kann entfernt werden. Der wird nicht mehr benötigt.
Follow Me❗️
Container installieren
Heimdall
Als Beispiel installieren wird Heimdall als Docker Container installiert.
Heimdall ist ein Application Dashboard, dass Webapplikationen schon darstellen kann.
Das Ziel ist, dass nach der Installation eine Website aufgerufen werden kann, um dort alle möglichen Icons anzulegen. Klickt man darauf, gelangt man zur Webapplikation. Also so was wir Bookmarks, nur ein wenig schöner.
Die Installation machen wir mit Docker Compose in Portianer.
Die UID und GID lassen sich ganz einfach herausfinden. Einfach mit dem Benutzer einloggen und den folgenden Befehl ausführen.
id
Je nach System und Benutzer kann die Ausgabe abweichen und kann angepasst werden.
version: '3.8'
services:
heimdall:
image: 'linuxserver/heimdall'
container_name: heimdall
restart: always
environment:
- PUID=1000
- PGID=1000
- TZ=Europe/Berlin
ports:
- '8001:80'
- '8002:443'
volumes:
- heimdall:/config
networks:
- heimdall
volumes:
heimdall:
networks:
heimdall:
driver: bridge
Die Dateien von Heimdall werden in das Verzeichnis heimdall auf dem Host geschrieben. Sie sind also kein Bestandteil des Containers. Aber wo liegen die Dateien?
Die Dateien werden im Docker-Verzeichnis abgelegt, außer es wird explizit ein anderes Verzeichnis angegeben.
Docker-Verzeichnis
/var/lib/docker/
Wenn man das Verzeichnis vor und nach der Installation von Heimdall aufruft, wird das besser ersichtlich
# VOR der Installation
sudo ls -lah /var/lib/docker/volumes/
total 36K
drwx-----x 3 root root 4.0K Aug 32 hh:43 .
drwx--x--- 14 root root 4.0K Aug 32 hh:30 ..
brw------- 1 root root 179, 2 Aug 32 hh:53 backingFsBlockDev
-rw------- 1 root root 32K Aug 32 hh:40 metadata.db
drwx-----x 3 root root 4.0K Aug 32 hh:58 portainer_data
# NACH der Installation
sudo ls -lah /var/lib/docker/volumes/
total 36K
drwx-----x 3 root root 4.0K Aug 32 hh:43 .
drwx--x--- 14 root root 4.0K Aug 32 hh:30 ..
brw------- 1 root root 179, 2 Aug 32 hh:53 backingFsBlockDev
-rw------- 1 root root 32K Aug 32 hh:43 metadata.db
drwx-----x 3 root root 4.0K Aug 32 hh:58 portainer_data
Nach der Installation kann Heimdall fast aufgerufen werden. Ein Blick in die Logs hilft bei langsamen Systemen zu erkennen, wann der Dienst zur Verfügung steht.
Ein Klick auf den jeweiligen Port leitet zur Webapplikation weiter.
Alternativ geht das Ganze natürlich auch über die CLI
sudo docker run --name=heimdall -d -v heimdall:/config -e PGID=1000 -e PUID=1000 -p 8001:80 -p 8002:443 linuxserver/heimdall
Nun kann es sein, dass beim Aufruf von Heimdall über Portainer eine Fehlermeldung im Webbrowser angezeigt wird.
Wenn man die Ausgabe genauer betrachtet erkennt man, dass anstatt der IP-Adresse der Pis `192.168.178.33` die IP-Adresse `0.0.0.0` angezeigt wird. Der Port ist korrekt gesetzt.
Wird die IP-Adresse und der Port manuell eingegeben, dann kann Heimdall aufgerufen werden.
http://192.168.178.33:8001
Abhilfe bei dem Problem hilft das manuelle Setzen der korrekten IP-Adresse des Pis in Portainer.
Im Abschnitt `Public IP` ist die Ip-Adresse des Pis einzutragen.
Danach kann Heimdall auch aus Portainer aufgerufen werden.
Die Einrichtung von Heimdall ist sehr einfach und intuitiv gehalten. Weitere Infos gibt es auf der offiziellen Website des Projekts:
Dashy
Wem Heimdall nicht zusagt, dem gefällt vielleicht Dashy. Installation mit Docker kein Problem.
Die Installation via Docker Compose über Stack in Portainer:
version: "3.8"
services:
dashy:
# To build from source, replace 'image: lissy93/dashy' with 'build: .'
# build: .
image: lissy93/dashy
container_name: dashy
# Pass in your config file below, by specifying the path on your host machine
# volumes:
# - /root/my-config.yml:/app/public/conf.yml
ports:
- 8080:80
# Set any environmental variables
environment:
- NODE_ENV=production
# Specify your user ID and group ID. You can find this by running `id -u` and `id -g`
# - UID=1000
# - GID=1000
# Specify restart policy
restart: always
# Configure healthchecks
healthcheck:
test: ['CMD', 'node', '/app/services/healthcheck']
interval: 1m30s
timeout: 10s
retries: 3
start_period: 40s
Installation über die CLI
sudo docker run -d \
-p 8080:80 \
--name dashy \
--restart=always \
lissy93/dashy:latest
Die Dateien werden wieder im Verzeichnis `/var/lib/docker/volumes/` und dort im Ordner dashy abgelegt.
Nach dem Ausführen einer der beiden Docker-Befehle muss ein wenig gewartet werden.
Gib mir gerne einen Kaffee ☕ aus ❗️
Wenn dir meine Beiträge gefallen und geholfen haben, dann kannst du mir gerne einen Kaffee ☕️ ausgeben.
Follow Me❗️
Source
Photo by Guillaume Bolduc on Unsplash