Innholdsfortegnelse:
2025 Forfatter: John Day | [email protected]. Sist endret: 2025-01-13 06:58
Denne instruksjonene viser hvordan du bygger et Docker -bilde for Raspberry Pi.
Trinn 1: Hvorfor Docker?
Du kan bruke Raspberry Pi (RPi) til å gjøre mange ting, liten webserver, AI -assistent, Robotics … etc.
Mange prosjekter du vil prøve, men smertepunktene er:
Tid til å bygge
RPi er ikke opptatt av prosessorkraft, og SD/USB -stasjonen begrenset IO -hastigheten. Bruk apt installer all avhengighetspakke krever en time og å bygge kilden krever flere timer. Spesielt for AI -relaterte prosjekter, tid til å vente mer enn tid å prøve.
Versjonskonflikt
Alle prøver mange prosjekter i en RPi. Når du har prøvd et prosjekt og ønsker å bytte til et annet, kan det hende at det oppstår en byggefeil som skyldes konflikt med avhengighetsbiblioteker med tidligere prosjekt. Noen biblioteker slutter å utvikle seg for noen år siden og er avhengige av noen veldig gamle biblioteker. I kontrast var det aktive prosjektet avhengig av de nyeste bibliotekene. Begge prosjektene kan ikke eksistere i samme SD/USB-stasjon ?.
Sikkerhetskopiering av bilder
Siden noen prosjekter ikke kan eksistere samtidig, kan du bare kjøpe mer SD/USB-stasjon for å holde hvert prosjektbilde avhengig. Hvis pengene ikke er begrenset ?. Men det øker problemene med fil-/bildebehandling, noen ganger trenger du bytte SD/USB og starte mange ganger for å finne ut hva du vil.
Vanskelig å dele
Når du bygde prosjektet ditt og vil dele kilden med venner, kan det hende at vennene dine får byggemislykket feed tilbake. Distribusjon/biblioteker versjon for gammel eller for ny, bygge parametere og noen triks. Du må bruke tiden på å løse andre bygge problemer, men ikke støtte selve prosjektet.
Ovennevnte smertepunkter er min erfaring de siste årene. Docker kan hjelpe det meste.
Docker starter bygge fra å velge et forhåndsbygd overordnet bilde. F.eks. debian: jessie-slim start fra en gammel stabil Debian lett vektfordeling; node: 10-buster-slank start fra Debians lette vektfordeling med Node.js 10 installert. Det forhåndsbygde bildet kan spare mye tid for å blinke bildet, få oppdatering og installere avhengige biblioteker. Hvert prosjekt kan starte fra forskjellige OS -versjoner, kjøretidsversjoner og biblioteksversjoner. Når du er ferdig med å utvikle ditt eget prosjekt, kan du skyve Docker -bildet til docker -hub og dele med alle. Du kan beholde alle prosjektdataene på samme SD/USB (data bør rutinemessig sikkerhetskopiere til andre medier). For å lagre lokal lagring kan du til og med rydde opp Docker -bildet når det ikke brukes, når som helst du kan trekke fra Docker -huben igjen.
Trinn 2: Docker Overhead
Docker la til ett virtualiseringslag, overhead er en bekymring. Jeg har ikke testet for mye om Docker -overhead. De fleste googlede resultatene hevder veldig lave omkostninger, og jeg fant dette dokumentet om noe relatert forskning:
domino.research.ibm.com/library/cyberdig.n…
Trinn 3: Installer Docker
Bare kjør:
curl -sSL https://get.docker.com | sh
Ref.:
www.raspberrypi.org/blog/docker-comes-to-…
docs.docker.com/get-started/
Trinn 4: Bygg Docker Image
Vennligst finn den offisielle guiden for å bygge docker -bilde:
docs.docker.com/get-started/part2/
Jeg har to prosjekter som bruker Docker, du kan finne Dockerfilen som en referanse:
BanateCAD krever Lua -kjøretid og noen tilleggs -Lua -biblioteker. Bare Lua 5.1 kan være kompatibel med alle nødvendige Lua -biblioteker, men det er et produkt fra 2006. Den siste Debian -distribusjonen som kan bygge Lua 5.1 -suksess er Jessie (versjonen før nåværende gamle Debian -stall). Så jeg bygde et Lua 5.1 miljø Docker Image for å kjøre det
github.com/moononournation/BanateCAD/tree/…
OpenCV er et aktivt utviklende prosjekt, kildekoden avhenger av de nyeste bibliotekene og kompilatoren. Så det er veldig stor sjanse for å bygge mislykkede biblioteksmetodesignatur, kompilatorversjon, avhengighetskonflikt … Jeg vil gjerne bruke opencv4nodejs til å lage en enkel app og trenger ikke de nyeste funksjonene. Så da jeg fant en måte å bygge opencv4nodejs -suksess på, ville jeg fryse den til et Docker -bilde og gjøre den egentlige applikasjonskodingen min
github.com/moononournation/face-aware-phot…
Trinn 5: Utvikling Bygghastighet mot bildestørrelse
Du kan finne ut at mitt ansiktsbevisste-foto-osd-prosjekt har to versjoner av Dockfile:
github.com/moononournation/face-aware-phot…
Mens jeg utvikler, liker jeg å dele RUN -kommandoen så liten som mulig, og jeg vil mest sannsynlig endre RUN -kommandoen til siste trinn. Så for hver build for utviklingsendring kan jeg bruke det tidligere bygde laget så mye som mulig og spare mye byggehastighet.
I kontrast vil jeg kombinere alle RUN -kommandoer i en før utgivelse. mindre lag kan redusere Docker Image -størrelsen mye. Mitt ansiktsbevisste-foto-osd-prosjekt som eksempel kan det redusere mer enn 100 MB i størrelse.
Trinn 6: Multi Arch -bilder
Som nevnt tidligere, er RPi ikke opptatt av prosessorkraft. Bruk RPi build Docker -bilde er kanskje ikke et godt valg, spesielt når din eneste RPi kjører andre prosjekter.
Bruk en x86 -datamaskin kan også hjelpe deg med å bygge Docker -bildet. Finn flere detaljer her:
www.docker.com/blog/multi-arch-images/
enkle 2 kommandoer kan bygge x86 og ARM Docker Image parallelt:
docker buildx create -bruk
docker buildx build-plattform linux/amd64, linux/arm -t moononournation/debian-imagemagick-lua-meshlab: 1.0.1 --push.
Multi Arch kan bygge multi -plattformsbilde med samme Docker -bildemerke, slik at prosjektet ditt kan kjøres sømløst i forskjellige maskiner. f.eks.
docker run -it moononournation/debian-imagemagick-lua-meshlab: 1.0.1
Uansett om du kjører kommandoen ovenfor på RPi eller din x86 -datamaskin, kan du få et Lua -kjøretidsmiljø.
Trinn 7: Happy RPi
Du kan nå lettere utvikle og dele RPi -prosjektet ditt!