Docker & Docker-Compose auf dem RaspberryPi

In diesem Beitrag zeige ich Euch wie Ihr in ein paar Schritten den Docker inkl. Docker Compose auf dem Raspberry Pi bzw. einem Linux System installiert.

Ich nutze Docker eigentlich auf jedem meiner Pi´s und meiner Linux Systeme um damit verschiedene Container bzw. Programme laufen zu lassen. Wie Ihr sehen könnt habe ich auf meinem Heim Server aktuell 9 Container laufen die wobei hier aber stetig neue hinzukommen.

In diesem Beispiel nutze ich den RaspberryPi 4.

Als erstes updaten/upgraden wir das System auf den neuesten Stand.

1. Update RaspberryPi:

sudo apt-get update && sudo apt-get upgrade

Danach solltet Ihr den Pi neu starten.

Jetzt könne wir schon mit der eigentlichen Installation beginnen, dazu laden wir uns ein Installations Skript herunter:

2. Download & Install Skript:

curl -fsSL https://get.docker.com -o get-docker.sh

Dann führen wir das Skript aus

sudo sh get-docker.sh

Nachdem das Skript durchgelaufen ist (ca. 2-5min) bekommt Ihr die Version in dem Output angezeigt.

3. Nicht Root User zur Docker Gruppe hinzufügen:

Um jetzt nicht ständig „sudo“ vor den docker befehlen eingeben zu müssen fügen wir einfach einen Benutzer der Docker Gruppe hinzu. In meinem Fall logge ich mich mit dem User pi ins Terminal ein somit füge ich pi zur Docker Gruppe:

sudo usermod -aG docker pi

Ihr bekommt keine Bestätigung oder sonstigen Output es sei denn es wurde ein Fehler gemacht.

Um das ganze jetzt zu aktivieren bzw. geltend zu machen schließt ihr den Terminal/Putty und loggt euch dann erneut mit dem User pi ein.

Jetzt könnt Ihr die Docker Version überprüfen mit

docker version

Mit docker info bekommt Ihr sogar noch mehr Informationen

4. Docker testen:

Um jetzt Docker zu testen um zu kontrollieren ob alles reibungslos funktioniert könnt Ihr den Hello World Container benutzen.

docker run hello-world

Ihr solltet dann die Nachricht „Hello from Docker !“ und This message shows that your installation appears to be working correctly bekommen.

Für ein Docker update reicht der übliche Befehl:

sudo apt-get upgrade

Falls Ihr Docker deinstallieren bzw. entfernen wollt benötigt Ihr nur diese Zeile:#

sudo apt-get purge docker-ce

Nun sollte Docker einwandfrei laufen und Ihr könnt mit der Installation von Docker-Compose fortfahren. Natürlich könnt Ihr auch jetzt schon den Docker nutzen nur finde ich die Verwendung mit dem Docker-Compose um einiges übersichtlicher.

5. Docker-Compose installieren:

Um Docker-Compose installieren zu können benötigen wir pip3 und python3.

sudo apt-get install libffi-dev libssl-dev
sudo apt install python3-dev
sudo apt-get install -y python3 python3-pip

Nachdem dieser Schritt erledigt ist benötigen wir nur noch diese Zeile um Docker-Compose zu installieren:

sudo pip3 install docker-compose

Um jetzt den Docker sowie auch Docker-Compose nach einem reboot zu starten gebt Ihr diese Zeile ein:
Mit dieser Zeile werden dann auch alle Container die „always“ oder „unless-stopped“ gesetzt haben automatisch wieder gestartet.

sudo systemctl enable docker

So nun haben wir alles installiert um mit Docker arbeiten zu können. Um jetzt die Compose Files anlegen zu können habe ich in diesem Beispiel einen Ordner angelegt in

6. Docker-Compose Ordner und Dateistruktur

/home/pi

Diesen Ordner nenne ich docker-compose-data (beim Beispiel hier benutze ich statt pi – debian)

In dem Ordner docker-compose-data kommen dann all meine „Services“ rein, für diese legt Ihr euch am besten auch eigene Ordner an.

Dann in dem Ordner portainer z.b. liegt dann die eigentliche .yml Datei. In dem Ordner könnt Ihr z.b. in WinSCP einfach auf Datei neu klicken und eine Datei mit dem Namen docker-compose.yml erstellen. In diese Datei fügt Ihr dann folgendes ein.

version: '3'

services:
  portainer:
    image: portainer/portainer:latest
    container_name: portainer
    restart: always
    ports:
      - 8999:9000
      - 8000:8000
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
      - portainer_data:/data
volumes:
  portainer_data:

Jetzt betrachten wir uns diese .yml Datei genauer.

Ihr könnt auch mehrere services in einer .yml Datei einbinden bzw. hinterlegen, ich nutze diese Funktion jedoch nicht da ich bei eventuellen Fehlern das dann mit der jeweiligen .yml Datei eingrenzen kann.

Am Anfang muss immer die Version stehen, hier zu sehen mit version: ´3´, diese ist abhängig von der installierten Docker-Compose Version. Hier nach dieser Anleitung nutzt einfach immer die Version 3.

Bei den services: tragt ihr dann den zu installierenden Service ein. Hier in diesem Fall portainer:

Das image: das genutzt bzw. installiert werden soll ist hier portainer/portainer:latest dieses hängt natürlich auch immer mit dem Service zusammen.

Der container_name: portainer ist frei wählbar.

Die restart: Funktion ist sehr wichtig da es diese ermöglicht unsere Container automatisch nach einem reboot zu starten hier könnt ihr entweder always oder unless-stopped eingeben.

Die Ports sind teilweise vorgegeben können aber auch teilweise verändert werden dass kommt immer auf den Service/Container an. Hier verwenden wir ports: – 8999 (unter diesem Port ist der Service im Browser erreichbar dieser kann nach belieben verändert werden, http://localhost:8999) : 9000 ist der interne Port für Portainer. Die zweite Zeile hier bei Portainer ist speziell und ist ein „Tunnel“ Port und wird für Edge Agent benötigt also diesen könnt Ihr nicht verändern.

Die volumes: /var/run/docker.sock:/var/run/docker.sock ist vorgegeben und sollte nicht verändert werden, das ist im Endeffekt der Zugriff auf unseren Docker selbst. Sieht natürlich auch bei anderen Containern etwas anders aus.

Bei – portainer_data: /data wird das Volume portainer_data erstellt (auf dem Pi) und „verbunden“ mit :/data, das wiederum ist der Pfad in dem Container Portainer. Der Container verliert ja nach Beendigung die Daten deswegen wird der Pfad gemapped.

So nun aber genug mit der eigentlich .yml Datei. Meistens gibts die Dateien schon fertig irgendwo im Web die Ihr dann einfach so benutzen könnt. Wenn Ihr genaueres über die .yml Dateistruktur wissen wollt schaut einfach mal auf https://docs.docker.com/compose/

7. Starten des Containers und Docker-Compose Befehle

Nachdem Ihr die Datei gespeichert habt gehen wir in Putty oder im Terminal in das Verzeichnis portainer das wir oben erstellt haben.

Wenn Ihr dann in diesem Verzeichnis seit startet Ihr den Container einfach mit:

docker-compose up

Beim erstmaligen ausführen wird erst das Image geladen somit kann das ein bisschen dauern. Nachdem Ihr euch das Image gezogen habt funktioniert dieser Befehl aber rasend schnell.

Um jetzt zu überprüfen ob der Container auch läuft könnt Ihr einfach diesen Befehl eingeben:

sudo docker container ls -a

Dann solltet Ihr eine Ausgabe mit diesen Informationen erhalten:

Um jetzt z.b. einen Container zu stoppen geht ihr wieder in das zugehörige Verzeichnis und gebt folgendes ein.

docker-compose stop

Starten mit:

docker-compose start

Neustarten

docker-compose restart

Container löschen

docker-compose rm

Es gibt noch etliche weitere Befehle https://docs.docker.com/engine/reference/commandline/compose/

So nachdem wir den Container jetzt gestartet haben sollten wir mit der Browser Zeile http://localhost:8999 die Portainer Oberfläche sehen und somit läuft das ganze 😉

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.