Raspberry Pi mit Raspberry Pi OS und Docker
Der Raspberry Pi ist perfekt geeignet um die ersten Schritte mit Docker und Docker Compose zu gehen. Das Setup hier hat keine 30 Minuten in Anspruch genommen. Man kann also Ruckzuck die ersten Docker Container starten und nutzen. Eine Sache gibt es jedoch zu beachten. Aufgrund der ARM Architektur sind nicht alle Docker Images lauffähig. Nur die ARM (aarch64 / armv7l) kompatiblen Images funktionieren auf dem Raspberry Pi. Heißt auch, dass ihr ggf. die Images neu für den Raspberry Pi bauen (build) müsst.
Den Raspberry Pi 4 im Set bekommt ihr hier:
Den neuen Raspberry Pi 5 hier:
Installation Raspberry Pi OS
Um Docker zu installieren benötigt ihr ein lauffähiges Raspberry Pi OS im besten Fall eine 64bit Installation. Wie man ein aktuelles Raspbberry Pi OS installiert, könnt ihr hier nachlesen:
Installation Docker
Nun kommen wir zur Docker Installation auf dem Raspberry Pi unter Raspberry Pi OS. Dies passiert mit folgendem Einzeiler ganz einfach und schnell:
curl -sSL https://get.docker.com | sh
das war es schon. getestet werden kann das Ganze dann mit dem hello World
Container:
docker run hello-world
bringt dann in etwas den folgenden Output:
Unable to find image 'hello-world:latest' locally latest: Pulling from library/hello-world 4ee5c797bcd7: Pull complete Digest: sha256:9572f7cdcee8591948c2963463447a53466950b3fc15a247fcad1917ca215a2f 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/
Docker Compose
Docker Compose ist mittlerweile Bestandteil der normalen Docker Installation und muss nicht mehr nach installiert werden.
Tuning
Im Syslog tauchen einige Meldungen bezüglich Mounts auf. Ich habe diese deaktiviert:
des Weiteren kam es noch zu folgender Meldung:
containerd[546]: time="2020-12-02T07:53:04.917195089+01:00" level=warning msg="OOM monitoring failed" error="cgroups: memory cgroup not supported on this system"
Dies bekommt man weg in dem man die /boot/cmdline.txt
um cgroup_memory=1
und cgroup_enable=memory
erweitert:
/boot/cmdline.txt
console=serial0,115200 console=tty1 root=PARTUUID=738a4d67-02 rootfstype=ext4 elevator=deadline fsck.repair=yes rootwait cgroup_memory=1 cgroup_enable=memory
danach sollte man den Raspberry Neustarten:
reboot
IPv6 deaktivieren
DHCPCD Problem
Es kommt bei zu vielen virtuellen Docker Netzwerkinterfacen dazu, das der dhcpcd5
Daemon abstürzt, und beim Booten erst gar nicht geladen wird. Heißt auch, das euer System nach einer Zeit die IP Adresse verliert und euer System nicht mehr erreichbar ist. Dieses Problem wird wohl in einer neueren Version des dhcpcd5
behoben, ist aber noch nicht unter dem Raspberry Pi OS verfügbar. Dieser Workaround sorgt dafür, das die virtuellen veth*
interfaces nicht vom dhcpcd5
daemon genutzt werden. Hierfür muss der Datei /etc/dhcpcd.conf
am Ende die folgende Zeile hinzugefügt werden:
denyinterfaces veth*
Die Fehlermeldung sieht so aus:
Warning: The unit file, source configuration file or drop-ins of dhcpcd.service changed on disk. Run 'systemctl daemon-reload' to reload units. ● dhcpcd.service - dhcpcd on all interfaces
Loaded: loaded (/lib/systemd/system/dhcpcd.service; enabled; vendor preset: enabled) Drop-In: /etc/systemd/system/dhcpcd.service.d └─wait.conf Active: failed (Result: signal) since Fri 2021-01-22 15:36:35 CET; 1 day 6h ago Process: 340 ExecStart=/usr/lib/dhcpcd5/dhcpcd -q -w (code=exited, status=0/SUCCESS) Main PID: 484 (code=killed, signal=SEGV)Jan 22 15:36:35 home-server dhcpcd[484]: veth2c6abe3: waiting for carrier Jan 22 15:36:35 home-server dhcpcd[484]: vethf713b46: IAID 69:de:ae:f1 Jan 22 15:36:35 home-server dhcpcd[484]: vethf713b46: adding address fe80::e7........7:52f9 Jan 22 15:36:35 home-server dhcpcd[484]: veth88ef6b4: waiting for carrier Jan 22 15:36:35 home-server dhcpcd[484]: veth514e931: waiting for carrier Jan 22 15:36:35 home-server dhcpcd[484]: route socket overflowed - learning interface state Jan 22 15:36:35 home-server dhcpcd[484]: vethf32a0ec: carrier acquired Jan 22 15:36:35 home-server dhcpcd[484]: vethf32a0ec: IAID bf:44:26:9c Jan 22 15:36:35 home-server systemd[1]: dhcpcd.service: Main process exited, code=killed, status=11/SEGV Jan 22 15:36:35 home-server systemd[1]: dhcpcd.service: Failed with result 'signal'.
Mehr dazu hier: