Zum Inhalt

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:

htop

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

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

Portainer Installation

Klick auf "Get Startet".

Portainer Installation

Das wars! Portainer kann verwendet werden.

Portainer Overview

Portainer Overview

Der Container hello-world kann entfernt werden. Der wird nicht mehr benötigt.

Portainer - hello world entfernen

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.

Heimdall Application Dashboard

Heimdall Application Dashboard

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.

Heimdall Application Dashboard

Ein Klick auf den jeweiligen Port leitet zur Webapplikation weiter.

Heimdall Application Dashboard

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.

Heimdall Application Dashboard

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.

Portainer

Im Abschnitt `Public IP` ist die Ip-Adresse des Pis einzutragen.

Portainer

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.

Dashy

Gib mir gerne einen Kaffee ☕ aus ❗️

Wenn dir meine Beiträge gefallen und geholfen haben, dann kannst du mir gerne einen Kaffee ☕️ ausgeben.

Donation via PayPalDonation via LiberaPay

Donation via Bitcoin
Bitcoin Address: bc1qfuz93hw2fhdvfuxf6mlxlk8zdadvnktppkzqzj

Source

Photo by Guillaume Bolduc on Unsplash