Innehållsförteckning:
2025 Författare: John Day | [email protected]. Senast ändrad: 2025-01-13 06:58
Denna instruktioner visar hur man bygger en Docker -bild för Raspberry Pi.
Steg 1: Varför Docker?
Du kan använda Raspberry Pi (RPi) göra många saker, liten webbserver, AI -assistent, Robotics … etc.
Många projekt du vill prova, men smärtpunkterna är:
Dags att bygga
RPi är inte sugen på processorkraft och SD/USB -enheten begränsade IO -hastigheten. Använd apt installera allt beroendepaket kräver en timme och att bygga källan kräver fler timmar. Speciellt för AI -relaterade projekt, dags att vänta mer än tid att prova.
Versionskonflikt
Alla provar många projekt i en RPi. När du har provat ett projekt och vill byta till ett annat kan det hända att något byggfel orsakas av beroendebibliotekets versionskonflikt med tidigare projekt. Vissa bibliotek slutar utvecklas för några år sedan och är beroende av några mycket gamla bibliotek. Däremot berodde det aktiva projektet på de senaste biblioteken. Båda projekten kan inte samexistera i samma SD/USB-enhet ?.
Bildbackup
Eftersom vissa projekt inte kan samexistera, köper du bara mer SD/USB-enhet för att hålla varje projektbild beroende är ett sätt. Om pengarna inte är begränsade ?. Men det ökar svårigheterna med fil-/bildhantering, ibland behöver du byta SD/USB och starta många gånger för att ta reda på vad du vill.
Svårt att dela
När du byggde ditt projekt och skulle vilja dela källan till vänner kan dina vänner få tillbaka det misslyckade flödet. Distribution/bibliotek version för gammal eller för ny, bygga parametrar och några knep. Du behöver använda tiden för att lösa andra byggproblem, men inte stödja själva projektet.
Ovanstående smärtpunkter är min erfarenhet under de här åren. Docker kan hjälpa det mesta.
Docker börjar bygga från att välja en förbyggd överordnad bild. T.ex. debian: jessie-slim start från en gammal stabil Debian lättviktsfördelning; nod: 10-buster-smal start från Debians lättviktsfördelning med Node.js 10 installerat. Den förbyggda bilden kan spara mycket tid för att flasha bild, få uppdatering och installera beroende bibliotek. Varje projekt kan utgå från olika OS -versioner, körtidsversioner och biblioteksversioner. När du har utvecklat ditt eget projekt kan du flytta Docker -bilden till dockningsnavet och dela till alla. Du kan behålla alla projektdata på samma SD/USB (data bör rutinmässig säkerhetskopiering till andra medier). För att spara lokal lagring kan du till och med rensa Docker -bilden när den inte används, när som helst du kan dra från Docker -hubben igen.
Steg 2: Docker Overhead
Docker har lagt till ett virtualiseringslager, omkostnader är ett problem. Jag har inte testat för mycket om Docker -omkostnaderna. De flesta Googlade resultat hävdar mycket låga omkostnader och jag hittade det här dokumentet om viss relaterad forskning:
domino.research.ibm.com/library/cyberdig.n…
Steg 3: Installera Docker
Kör helt enkelt:
curl -sSL https://get.docker.com | sh
Ref.:
www.raspberrypi.org/blog/docker-comes-to-…
docs.docker.com/get-started/
Steg 4: Bygga Docker Image
Vänligen hitta den officiella guiden för att bygga dockningsbild:
docs.docker.com/get-started/part2/
Jag har två projekt som använder Docker, du kan hitta Dockerfilen som referens:
BanateCAD kräver Lua -körning och några ytterligare Lua -bibliotek. Endast Lua 5.1 kan kompatibelt med alla Lua -bibliotek som krävs, men det är produkten från 2006. Den senaste Debian -distributionen som kan bygga Lua 5.1 -framgång är Jessie (versionen före nuvarande Debian gamla stall). Så jag byggde en Lua 5.1 miljö Docker Image för att köra den
github.com/moononournation/BanateCAD/tree/…
OpenCV är ett aktivt utvecklande projekt, källkoden beror på de senaste biblioteken och kompilatorn. Så det är mycket stor chans att bygga misslyckad, biblioteks metod signatur, kompilatorversion, beroendekonflikt … Jag skulle vilja använda opencv4nodejs för att göra en enkel app och behöver inte de senaste funktionerna. Så när jag hittade ett sätt att bygga opencv4nodejs framgång, skulle jag vilja frysa den till en Docker Image och göra min faktiska programkodning
github.com/moononournation/face-aware-phot…
Steg 5: Utveckling Bygg hastighet mot bildstorlek
Du kanske hittade att mitt ansiktsmedvetna-foto-osd-projekt har två versioner av Dockfile:
github.com/moononournation/face-aware-phot…
Under utvecklingen gillar jag split RUN -kommandot så litet som möjligt och ordnar mest troligt att RUN -kommandot ändras till sista steget. Så för varje build för utvecklingsändring kan jag använda tidigare byggt lager så mycket som möjligt och spara mycket bygghastighet.
Däremot kommer jag att kombinera alla RUN -kommandon i ett innan release. mindre lager kan mycket minska Docker Image -storleken. Mitt ansiktsmedvetna-foto-osd-projekt som exempel kan det minska mer än 100 MB i storlek.
Steg 6: Multi Arch -bilder
Som nämnts tidigare är RPi inte sugen på processorkraft. Använd RPi build Docker -bild kanske inte är ett bra val, särskilt när din enda RPi kör andra projekt.
Använd en x86 -dator kan också hjälpa dig att bygga Docker -bilden, hitta mer information här:
www.docker.com/blog/multi-arch-images/
enkla 2 -kommandon kan bygga x86 och ARM Docker Image parallellt:
docker buildx skapa --använd
docker buildx build-plattform linux/amd64, linux/arm -t moononournation/debian-imagemagick-lua-meshlab: 1.0.1 --push.
Multi Arch kan bygga multi -plattformsbild med samma Docker -bildtagg, så att ditt projekt kan köras i olika maskiner sömlöst. t.ex.
docker run -it moononournation/debian-imagemagick-lua-meshlab: 1.0.1
Oavsett om du kör ovanstående kommando på RPi eller din x86 -dator kan du få en Lua -runtime -miljö.
Steg 7: Glad RPi
Du kan nu utveckla och dela ditt RPi -projekt lättare!