Inhaltsverzeichnis:

Docker-Image für Raspberry Pi erstellen - Gunook
Docker-Image für Raspberry Pi erstellen - Gunook

Video: Docker-Image für Raspberry Pi erstellen - Gunook

Video: Docker-Image für Raspberry Pi erstellen - Gunook
Video: Docker auf dem Raspberry Pi installieren (Einsteiger-Tutorial) 2024, November
Anonim
Docker-Image für Raspberry Pi erstellen
Docker-Image für Raspberry Pi erstellen

Diese Anleitungen zeigen, wie Sie ein Docker-Image für Raspberry Pi erstellen.

Schritt 1: Warum Docker?

Sie können Raspberry Pi (RPi) verwenden, um viele Dinge zu tun, winzige Webserver, KI-Assistenten, Robotik usw.

Viele Projekte, die Sie ausprobieren möchten, aber die Schwachstellen sind:

Zeit zum Bauen

RPi ist nicht an Rechenleistung interessiert, und das SD / USB-Laufwerk begrenzt die IO-Geschwindigkeit. Verwenden Sie apt install alle Abhängigkeitspakete benötigen eine Stunde und das Erstellen der Quelle erfordert mehr Stunden. Vor allem bei KI-bezogenen Projekten ist es Zeit, mehr zu warten als es zu versuchen.

Versionskonflikt

Jeder probiert viele Projekte in einem RPi aus. Wenn Sie ein Projekt ausprobiert haben und zu einem anderen wechseln möchten, stellen Sie möglicherweise fest, dass einige Builds fehlschlagen, die durch einen Versionskonflikt der Abhängigkeitsbibliotheken mit dem vorherigen Projekt verursacht werden. Einige Bibliotheken hören vor einigen Jahren auf, sich zu entwickeln und sind von einigen sehr alten Bibliotheken abhängig. Im Gegensatz dazu war das aktive Projekt von den neuesten Bibliotheken abhängig. Beide Projekte können nicht auf demselben SD/USB-Laufwerk gleichzeitig existieren?.

Image-Backup

Da einige Projekte nicht nebeneinander existieren können, kaufen Sie einfach mehr SD/USB-Laufwerke, um jedes Projektbild abhängig zu machen. Wenn das Geld nicht begrenzt ist?. Aber es erhöht die Schwierigkeiten der Datei-/Image-Verwaltung, manchmal müssen Sie SD/USB austauschen und viele Male booten, um herauszufinden, was Sie wollen.

Schwer zu teilen

Wenn Sie Ihr Projekt erstellt haben und die Quelle an Freunde weitergeben möchten, erhalten Ihre Freunde möglicherweise das Feedback zum fehlgeschlagenen Build. Distributions-/Bibliotheksversion zu alt oder zu neu, Gebäudeparameter und einige Tricks. Sie müssen die Zeit aufwenden, um andere Build-Probleme zu lösen, aber nicht das Projekt selbst zu unterstützen.

Die oben genannten Schmerzpunkte sind meine Erfahrung in diesen paar Jahren. Docker kann das meiste davon helfen.

Docker startet den Build durch die Auswahl eines vorgefertigten übergeordneten Images. Z. B. debian:jessie-slim startet von einer alten stabilen Debian-Lightweight-Distribution; node:10-buster-slim Start von der Debian-Leichtgewichtsverteilung mit installiertem Node.js 10. Das vorgefertigte Image kann viel Zeit sparen, um Image zu flashen, Updates zu erhalten und abhängige Bibliotheken zu installieren. Jedes Projekt kann mit unterschiedlichen OS-Versionen, Runtime-Versionen und Bibliotheken-Versionen gestartet werden. Wenn Sie mit der Entwicklung Ihres eigenen Projekts fertig sind, können Sie das Docker-Image an Docker Hub übertragen und für alle freigeben. Sie können alle Projektdaten auf derselben SD/USB speichern (Daten sollten routinemäßig auf andere Medien gesichert werden). Um lokalen Speicher zu sparen, können Sie das Docker-Image sogar bereinigen, wenn es nicht verwendet wird, und jederzeit wieder aus dem Docker-Hub ziehen.

Schritt 2: Docker-Overhead

Docker hat eine Virtualisierungsschicht hinzugefügt, der Overhead ist ein Problem. Ich habe nicht zu viel über den Docker-Overhead getestet. Die meisten Google-Ergebnisse beanspruchen einen sehr geringen Overhead und ich habe dieses Dokument über einige verwandte Forschungen gefunden:

domino.research.ibm.com/library/cyberdig.n…

Schritt 3: Docker installieren

Einfach ausführen:

curl -sSL https://get.docker.com | NS

Ref.:

www.raspberrypi.org/blog/docker-comes-to-…

docs.docker.com/get-started/

Schritt 4: Docker-Image erstellen

Hier finden Sie den offiziellen Leitfaden zum Bau von Docker-Images:

docs.docker.com/get-started/part2/

Ich habe 2 Projekte, die Docker verwenden, Sie finden das Dockerfile möglicherweise als Referenz:

BanateCAD erfordert Lua-Laufzeit und einige zusätzliche Lua-Bibliotheken. Nur Lua 5.1 kann mit allen erforderlichen Lua-Bibliotheken kompatibel sein, aber es ist das Produkt von 2006. Die neueste Debian-Distribution, die den Erfolg von Lua 5.1 aufbauen kann, ist Jessie (die Version vor dem aktuellen Debian Old Stable). Also habe ich ein Docker-Image für die Lua 5.1-Umgebung erstellt, um es auszuführen

github.com/moononournation/BanateCAD/tree/…

OpenCV ist ein sich aktiv entwickelndes Projekt, der Quellcode hängt von den neuesten Bibliotheken und Compilern ab. Daher ist es sehr wahrscheinlich, dass die Erstellung fehlgeschlagen ist, Bibliotheksmethodensignatur, Compilerversion, Abhängigkeitskonflikt… Ich möchte opencv4nodejs verwenden, um eine einfache App zu erstellen und die neuesten Funktionen nicht zu benötigen. Als ich also einen Weg gefunden habe, den Erfolg von opencv4nodejs aufzubauen, möchte ich es in ein Docker-Image einfrieren und meine eigentliche Anwendungscodierung durchführen

github.com/moononournation/face-aware-phot…

Schritt 5: Entwicklung Build-Geschwindigkeit vs. Bildgröße

Entwicklung Build-Geschwindigkeit vs. Bildgröße
Entwicklung Build-Geschwindigkeit vs. Bildgröße
Entwicklung Build-Geschwindigkeit vs. Bildgröße
Entwicklung Build-Geschwindigkeit vs. Bildgröße

Sie können feststellen, dass mein gesichtsbewusstes Foto-OSD-Projekt 2 Versionen von Dockfile hat:

github.com/moononournation/face-aware-phot…

Während der Entwicklung möchte ich den RUN-Befehl so klein wie möglich aufteilen und am ehesten den RUN-Befehl zum letzten Schritt ändern. So kann ich bei jedem Build für Entwicklungsänderungen so viel wie möglich auf den vorherigen Build-Layer zurückgreifen und viel Build-Geschwindigkeit sparen.

Im Gegensatz dazu werde ich vor der Veröffentlichung alle RUN-Befehle in einem zusammenfassen. Eine geringere Ebene kann die Docker-Image-Größe erheblich reduzieren. Mein gesichtsbewusstes Foto-OSD-Projekt als Beispiel kann mehr als 100 MB verkleinern.

Schritt 6: Multi-Bogen-Bilder

Multi-Bogen-Bilder
Multi-Bogen-Bilder

Wie bereits erwähnt, ist RPi nicht an Rechenleistung interessiert. Verwenden Sie das RPi-Build Docker-Image möglicherweise keine gute Wahl, insbesondere wenn Ihr einziges RPi andere Projekte ausführt.

Die Verwendung eines x86-Computers kann Ihnen auch beim Erstellen des Docker-Images helfen. Weitere Informationen finden Sie hier:

www.docker.com/blog/multi-arch-images/

einfache 2-Befehle können x86- und ARM-Docker-Image parallel erstellen:

docker buildx create --use

docker buildx build --platform linux/amd64, linux/arm -t moononournation/debian-imagemagick-lua-meshlab:1.0.1 --push.

Multi Arch kann Multi-Plattform-Images mit demselben Docker-Image-Tag erstellen, sodass Ihr Projekt nahtlos auf verschiedenen Computern ausgeführt werden kann. z. B.

docker run -it moononournation/debian-imagemagick-lua-meshlab:1.0.1

Unabhängig davon, ob Sie den obigen Befehl auf RPi oder Ihrem x86-Computer ausführen, können Sie eine Lua-Laufzeitumgebung erhalten.

Schritt 7: Glückliches RPi

Sie können Ihr RPi-Projekt jetzt einfacher entwickeln und teilen!

Empfohlen: