Sommario:

Costruisci un'immagine Docker per Raspberry Pi: 7 passaggi
Costruisci un'immagine Docker per Raspberry Pi: 7 passaggi

Video: Costruisci un'immagine Docker per Raspberry Pi: 7 passaggi

Video: Costruisci un'immagine Docker per Raspberry Pi: 7 passaggi
Video: self hosted password manager on raspberry pi 2024, Dicembre
Anonim
Crea immagine Docker per Raspberry Pi
Crea immagine Docker per Raspberry Pi

Queste istruzioni mostrano come creare un'immagine Docker per Raspberry Pi.

Passaggio 1: perché Docker?

Puoi usare Raspberry Pi (RPi) per fare molte cose, piccoli server web, assistente AI, robotica … ecc.

Molti progetti che vorresti provare, ma i punti dolenti sono:

È ora di costruire

RPi non è entusiasta della potenza di elaborazione e l'unità SD/USB ha limitato la velocità di I/O. Utilizzare apt install all dependency package richiede un'ora e la compilazione del sorgente richiede più ore. Soprattutto per i progetti relativi all'intelligenza artificiale, è tempo di aspettare più del tempo di provare.

Conflitto di versione

Tutti provano molti progetti in un RPi. Quando hai provato un progetto e desideri passare a un altro, potresti riscontrare alcuni errori di compilazione causati dal conflitto della versione delle librerie di dipendenze con il progetto precedente. Alcune biblioteche smettono di svilupparsi da qualche anno e dipendono da biblioteche molto antiche. Al contrario, il progetto attivo dipendeva dalle librerie più recenti. Entrambi i progetti non possono coesistere nella stessa unità SD/USB?.

Backup immagine

Poiché alcuni progetti non possono coesistere, è sufficiente acquistare più unità SD/USB per mantenere l'immagine di ogni progetto dipendente. Se il denaro non è limitato?. Ma aumenta le difficoltà di gestione di file/immagini, a volte è necessario scambiare SD/USB e avviare molte volte per scoprire cosa si desidera.

Difficile da condividere

Quando hai creato il tuo progetto e vorresti condividere la fonte con gli amici, i tuoi amici potrebbero ricevere il feedback di build fallita. Versione di distribuzione/librerie troppo vecchia o troppo nuova, parametri di costruzione e alcuni trucchi. È necessario utilizzare il tempo per risolvere altri problemi di costruzione ma non per supportare il progetto stesso.

I punti dolenti di cui sopra sono la mia esperienza in questi pochi anni. Docker può aiutare la maggior parte di esso.

Docker avvia la compilazione dalla selezione di un'immagine padre predefinita. Per esempio. debian:jessie-slim parte da una vecchia distribuzione stabile Debian leggera; node:10-buster-slim inizia dalla distribuzione leggera di Debian con Node.js 10 installato. L'immagine predefinita può far risparmiare molto tempo per flashare l'immagine, ottenere aggiornamenti e installare librerie dipendenti. Ogni progetto può iniziare da diverse versioni del sistema operativo, versione runtime e versione delle librerie. Quando hai finito di sviluppare il tuo progetto, puoi inviare l'immagine Docker all'hub docker e condividerla con tutti. È possibile conservare tutti i dati del progetto sulla stessa SD/USB (i dati dovrebbero essere backup di routine su altri supporti). Per salvare l'archiviazione locale, puoi anche ripulire l'immagine Docker quando non la usi, ogni volta che puoi estrarre di nuovo dall'hub Docker.

Passaggio 2: Docker Overhead

Docker ha aggiunto un livello di virtualizzazione, il sovraccarico è un problema. Non ho testato troppo sull'overhead di Docker. La maggior parte dei risultati su Google richiede un sovraccarico molto basso e ho trovato questo documento su alcune ricerche correlate:

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

Passaggio 3: installa Docker

Esegui semplicemente:

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

Rif.:

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

docs.docker.com/get-started/

Passaggio 4: creazione dell'immagine Docker

Si prega di trovare la guida ufficiale sulla creazione di immagini docker:

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

Ho 2 progetti che utilizzano Docker, potresti trovare il Dockerfile come riferimento:

BanateCAD richiede il runtime Lua e alcune librerie Lua aggiuntive. Solo Lua 5.1 può essere compatibile con tutte le librerie Lua richieste, ma è il prodotto del 2006. L'ultima distribuzione Debian che può creare il successo di Lua 5.1 è Jessie (la versione precedente all'attuale vecchia stabile Debian). Quindi ho creato un'immagine Docker dell'ambiente Lua 5.1 per eseguirlo

github.com/moononournation/BanateCAD/tree/…

OpenCV è un progetto in via di sviluppo attivo, il codice sorgente dipende dalle librerie e dal compilatore più recenti. Quindi è molto alta la possibilità di creare errori, firma del metodo delle librerie, versione del compilatore, conflitto di dipendenze … Vorrei usare opencv4nodejs per creare un'app semplice e non richiedere le funzionalità più recenti. Quindi, quando ho trovato un modo per creare il successo di opencv4nodejs, vorrei congelarlo su un'immagine Docker ed eseguire la codifica dell'applicazione effettiva

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

Passaggio 5: velocità di creazione dello sviluppo rispetto alla dimensione dell'immagine

Velocità di costruzione dello sviluppo rispetto alla dimensione dell'immagine
Velocità di costruzione dello sviluppo rispetto alla dimensione dell'immagine
Velocità di costruzione dello sviluppo rispetto alla dimensione dell'immagine
Velocità di costruzione dello sviluppo rispetto alla dimensione dell'immagine

Potresti scoprire che il mio progetto face-aware-photo-osd ha 2 versioni di Dockfile:

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

Durante lo sviluppo, mi piace dividere il comando RUN il più piccolo possibile e organizzare molto probabilmente per cambiare il comando RUN all'ultimo passaggio. Quindi, per ogni modifica di build per lo sviluppo, posso utilizzare il più possibile il livello di build precedente e risparmiare molta velocità di build.

Al contrario, combinerò tutti i comandi RUN in uno prima del rilascio. un livello inferiore può ridurre di molto la dimensione dell'immagine Docker. Il mio progetto face-aware-photo-osd come esempio può ridurre le dimensioni di oltre 100 MB.

Passaggio 6: immagini multi-arco

Immagini multi-arco
Immagini multi-arco

Come accennato in precedenza, RPi non è un appassionato di potenza di elaborazione. Utilizzare l'immagine Docker build RPi potrebbe non essere una buona scelta, specialmente quando il tuo unico RPi sta eseguendo altri progetti.

Anche l'utilizzo di un computer x86 può aiutarti a creare l'immagine Docker, per ulteriori dettagli qui:

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

semplici 2 comandi possono creare x86 e ARM Docker Image in parallelo:

docker buildx create --use

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

Multi Arch può creare un'immagine multipiattaforma con lo stesso tag immagine Docker, in modo che il tuo progetto possa essere eseguito senza problemi su macchine diverse. per esempio.

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

Non importa che tu esegua il comando sopra su RPi o sul tuo computer x86, puoi ottenere un ambiente di runtime Lua.

Passaggio 7: buon RPi

Ora puoi sviluppare e condividere il tuo progetto RPi più facilmente!

Consigliato: