Med Docker på Raspberry Pi (4 / 5 steg)
Steg 4: Skapa våra Docker bilder
Kan skapa en bild som bygger på Raspbian Jessie distribution. Även om våra Pi är konfigurerad med Arch Linux, kan vi använda någon annan hallon-baserad OS som basavbildningen för vår tjänst. Jag kommer att följa anvisningarna från Adafuit NodeJS inbäddad utveckling.
Tanken bakom Docker är att skapa bilder som kan reproduceras när som helst. Eftersom projektet använder NodeJS, kan skapa en NodeJS-bild bara för Raspberry Pi. Senare ska vi skapa programmet i en annan Docker bild som kommer att grundas på denna bild.
Nod JS bild
Skapa en ny katalog som heter "rpi-nodejs" och ändra in i den. Nu skapa en fil med namnet "Dockerfile" med följande innehåll:
< p > från harts/rpi-raspbian:jessie < br > ANSVARIGE vipercmd < br >
KÖRA echo "deb < en href ="http://apt.adafruit.com/raspbian/"rel ="nofollow"> http://apt.adafruit.com/raspbian/ < /a > wheezy main" >> /etc/apt/sources.list & & \
apt-get update & & \
DEBIAN_FRONTEND = icke-interaktiv apt-get install -y--force-ja nod & & \
apt-get clean < /p >
Docker måste instrueras att läsa denna Dockerfile och skapa en bild. Detta görs med följande kommando:
$ docker Bygg -t rpi-nodejs.
Detta kommer att bygga en NodeJS bild baserat på innehållet i aktuellt "." katalogen. Bilden kommer att namnges "rpi-nodejs"
Dessa instruktioner är samma som det Adafruit documentation med några genvägar. Istället för att använda curl för att komma med i Adafruit databasen, La jag bara den till sources.list. Och slutligen som Docker bilder köra som root, bilden kommer inte att kräva GPIO-Admin projektet att vara en del av bilden. Du kan se denna bild i din lokala Docker bild arkivet:
$ docker bilder < br > databasen TAGG-ID skapas virtuella BILDSTORLEK < br > rpi-nodejs senaste f9a415a3f49b 2 minuter sedan 151.1 MB < br > harts/rpi-raspbian jessie f9b109c91ac9 3 månader sedan 119.7 MB
Ansökan bild
Nu kan skapa en bild som använder vår nya NodeJS bild för vår ansökan. Fortsätter med instruktionerna vi behöver installera och NPM paketet och Lägg till vår källkod.
Flytta tillbaka till den överordnade katalogen för "rpi-nodejs" och skapa en ny katalog som heter "rpi-onoff" och ändra in i den. Först skapa en ny arkivera benämn "test.js" med följande innehåll:
knappen är attaced till stift 17, ledde till 18 < br > var GPIO = require('onoff'). Gpio,
LED = nya GPIO (18, "ut"),
knappen = nya GPIO (17, 'i', 'båda'); < br >< br > / / Definiera callback-funktionen
fungerar ljus (err, statliga) {
Kontrollera tillståndet i knappen
1 == trycker på 0 == inte pressad
IF(State == 1) {
Aktivera LED
led.writeSync(1);
} annat {
Inaktivera LED
led.writeSync(0);
}
} < br >< br > / / passera callback-funktionen till < br > / / som det första argumentet till watch() < br > button.watch(light);
Och nu skapa en annan fil heter "Dockerfile" med följande innehåll:
FRÅN rpi-nodejs < br > ANSVARIGE vipercmd < br >
KÖRA npm installera onoff < br >
WORKDIR /app
ENTRYPOINT ["nod", "/ app/test.js"] < br >
KOPIA test.js /app/
Den första raden i Dockerfile påstår att denna bild kommer att grundas på vår nyinrättade rpi-nodejs bild. Detta är ett exempel på återanvändning av gemensamma bas bilder för olika projekt. Fördelen är att alla dina program/tjänst bilder är baserade på samma förälder.
Den springa lina kommer i beroendet för onoff via Pakethanteraren npm.
Slutligen skapas en katalog i bilden och skriptet test.js kopieras till det. Startadressen berättar Docker att när bilden avrättades och göras till en container att köra test.js skript med hjälp av noden.
Att kompilera och köra denna bild:
$ docker bygga -t rpi-onoff. < br >$ docker kör--privilegierade -d rpi-onoff
Alternativet "privilegierade" måste anges eftersom denna bild kräver R/W tillträde till GPIO stift. Nu när programmet körs, tryck på knappen och titta på LED turn på och av.