Inhoudsopgave:

Docker-afbeelding bouwen voor Raspberry Pi - Ajarnpa
Docker-afbeelding bouwen voor Raspberry Pi - Ajarnpa

Video: Docker-afbeelding bouwen voor Raspberry Pi - Ajarnpa

Video: Docker-afbeelding bouwen voor Raspberry Pi - Ajarnpa
Video: [Raspberry-Pi] Docker Server mit Portainer Benutzeroberfläche [Tutorial][4K] 2024, November
Anonim
Bouw Docker-afbeelding voor Raspberry Pi
Bouw Docker-afbeelding voor Raspberry Pi

Deze instructables laten zien hoe je een Docker-afbeelding voor Raspberry Pi kunt bouwen.

Stap 1: Waarom Docker?

Je kunt Raspberry Pi (RPi) voor veel dingen gebruiken, kleine webserver, AI-assistent, robotica … enz.

Veel projecten die je wilt proberen, maar de pijnpunten zijn:

Tijd om te bouwen

RPi is niet dol op verwerkingskracht en de SD / USB-drive beperkte de IO-snelheid. Gebruik apt install all dependency package vereist een uur en het bouwen van de source vereist meer uren. Vooral voor AI-gerelateerde projecten is het meer tijd om te wachten dan om het te proberen.

Versieconflict

Iedereen probeert veel projecten in één RPi. Wanneer u een project hebt geprobeerd en naar een ander project wilt overschakelen, kan het zijn dat een build mislukt, veroorzaakt door een conflict tussen de versie van de afhankelijkheidsbibliotheken en het vorige project. Sommige bibliotheken zijn enkele jaren geleden gestopt met ontwikkelen en zijn afhankelijk van enkele zeer oude bibliotheken. Het actieve project was daarentegen afhankelijk van de nieuwste bibliotheken. Beide projecten kunnen niet naast elkaar bestaan op dezelfde SD/USB-drive?.

Afbeeldingsback-up

Aangezien sommige projecten niet naast elkaar kunnen bestaan, is het een manier om gewoon meer SD/USB-drives te kopen om elk projectbeeld afhankelijk te houden. Als geld niet beperkt is?. Maar het vergroot de moeilijkheden van bestands-/afbeeldingsbeheer, soms moet je SD/USB verwisselen en vaak opstarten om erachter te komen wat je wilt.

Moeilijk te delen

Wanneer je je project hebt gebouwd en de bron met vrienden wilt delen, kunnen je vrienden feedback krijgen over de mislukte build. Distributie/bibliotheken versie te oud of te nieuw, parameters bouwen en wat trucjes. U moet de tijd gebruiken om problemen van anderen op te lossen, maar het project zelf niet te ondersteunen.

Bovenstaande pijnpunten zijn mijn ervaring in deze paar jaar. Docker kan het meeste helpen.

Docker start de build door een vooraf gebouwde bovenliggende afbeelding te selecteren. bijv. debian:jessie-slim start van een oude stabiele lichtgewicht distributie van Debian; node:10-buster-slim start vanuit Debian lichtgewicht distributie met Node.js 10 geïnstalleerd. De vooraf gebouwde afbeelding kan veel tijd besparen om de afbeelding te flashen, updates te krijgen en afhankelijke bibliotheken te installeren. Elk project kan starten vanuit een andere OS-versie, runtime-versie en bibliothekenversie. Wanneer u klaar bent met het ontwikkelen van uw eigen project, kunt u de Docker-afbeelding naar de docker-hub pushen en met iedereen delen. U kunt alle projectgegevens op dezelfde SD/USB bewaren (gegevens moeten routinematig worden geback-upt naar andere media). Om lokale opslag op te slaan, kunt u zelfs de Docker-image opschonen wanneer u deze niet gebruikt, wanneer u deze opnieuw uit de Docker-hub kunt halen.

Stap 2: Docker overhead

Docker heeft één virtualisatielaag toegevoegd, overhead is een punt van zorg. Ik heb niet te veel getest over de Docker-overhead. De meeste Google-resultaten claimen een zeer lage overhead en ik vond dit document over gerelateerd onderzoek:

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

Stap 3: Installeer Docker

Gewoon uitvoeren:

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

ref.:

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

docs.docker.com/get-started/

Stap 4: Docker-afbeelding bouwen

Vind de officiële gids over het bouwen van docker-afbeeldingen:

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

Ik heb 2 projecten die Docker gebruiken, je kunt de Dockerfile als referentie vinden:

BanateCAD vereist Lua-runtime en enkele extra Lua-bibliotheken. Alleen Lua 5.1 is compatibel met alle vereiste Lua-bibliotheken, maar het is het product van 2006. De nieuwste Debian-distributie die Lua 5.1-succes kan bouwen, is Jessie (de versie vóór de huidige oude stal van Debian). Dus bouwde ik een Lua 5.1-omgeving Docker Image om het uit te voeren

github.com/moononournation/BanateCAD/tree/…

OpenCV is een actief ontwikkelend project, de broncode is afhankelijk van de nieuwste bibliotheken en compiler. Dus de kans is groot dat het bouwen is mislukt, de handtekening van de bibliothekenmethode, de compilerversie, het afhankelijkheidsconflict … Ik zou graag opencv4nodejs willen gebruiken om een eenvoudige app te maken en ik heb niet de nieuwste functies nodig. Dus toen ik een manier vond om het succes van opencv4nodejs op te bouwen, zou ik het willen bevriezen naar een Docker-image en mijn eigenlijke applicatiecodering doen

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

Stap 5: Ontwikkeling Bouwsnelheid versus afbeeldingsgrootte

Ontwikkeling Bouwsnelheid versus afbeeldingsgrootte
Ontwikkeling Bouwsnelheid versus afbeeldingsgrootte
Ontwikkeling Bouwsnelheid versus afbeeldingsgrootte
Ontwikkeling Bouwsnelheid versus afbeeldingsgrootte

Misschien heb je ontdekt dat mijn face-aware-photo-osd-project 2 versies van Dockfile heeft:

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

Tijdens de ontwikkeling vind ik het leuk om het RUN-commando zo klein mogelijk te splitsen en het meest waarschijnlijk het RUN-commando in de laatste stap te veranderen. Dus voor elke wijziging van build voor ontwikkeling, kan ik de vorige gebouwde laag zoveel mogelijk gebruiken en veel bouwsnelheid besparen.

Daarentegen zal ik alle RUN-commando's in één combineren voordat ze worden vrijgegeven. kleinere laag kan de grootte van de Docker-afbeelding aanzienlijk verkleinen. Mijn face-aware-photo-osd-project kan bijvoorbeeld meer dan 100 MB verkleinen.

Stap 6: afbeeldingen met meerdere bogen

Afbeeldingen met meerdere bogen
Afbeeldingen met meerdere bogen

Zoals eerder vermeld, is RPi niet dol op verwerkingskracht. Gebruik RPi build Docker-image is misschien geen goede keuze, vooral wanneer je enige RPi andere projecten uitvoert.

Het gebruik van een x86-computer kan u ook helpen bij het bouwen van de Docker-afbeelding, meer details vindt u hier:

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

eenvoudige 2 commando's kunnen parallel x86 en ARM Docker Image bouwen:

docker buildx maken --use

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

Multi Arch kan een image voor meerdere platforms bouwen met dezelfde Docker-imagetag, zodat uw project naadloos op verschillende machines kan worden uitgevoerd. bijv.

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

Het maakt niet uit of u de bovenstaande opdracht op RPi of uw x86-computer uitvoert, u kunt een Lua-runtime-omgeving krijgen.

Stap 7: Gelukkige RPi

U kunt nu uw RPi-project gemakkelijker ontwikkelen en delen!

Aanbevolen: