Stap 4: Maak onze Docker beelden
Laat een afbeelding die is gebaseerd op de verdeling van Raspbian Jessie. Hoewel onze Pi is geconfigureerd met Arch Linux, kunt wij elk ander framboos-gebaseerd besturingssysteem gebruiken als de basisafbeelding voor onze service. Ik zal de instructies van Adafuit NodeJS Embedded Development.
Het idee achter Docker is het creëren van beelden die kunnen worden gereproduceerd op elk gewenst moment. Aangezien het project NodeJS gebruikt, kunt een afbeelding NodeJS net voor de Raspberry Pi maken. Later maken we het programma in een andere afbeelding van Docker die zal worden gebaseerd op deze afbeelding.
Knooppunt JS afbeelding
Maak een nieuwe map met de naam "rpi-nodejs" en veranderen in het. Maak nu een bestand met de naam "Dockerfile" met de volgende inhoud:
<p>FROM resin/rpi-raspbian:jessie<br>MAINTAINER vipercmd<br> RUN echo "deb <a 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=noninteractive apt-get install -y --force-yes node && \ apt-get clean</p>
Docker moet worden geïnstrueerd om te lezen dit Dockerfile en maak een afbeelding. Dit wordt gedaan met de volgende opdracht:
$ docker build -t rpi-nodejs .
Dit zal bouwen een NodeJS afbeelding op basis van de inhoud van de huidige "." directory. De afbeelding zal worden genoemd "rpi-nodejs"
Deze instructies zijn hetzelfde als de Adafruit documentatie met sommige snelkoppelingen. In plaats van het gebruiken van krul te brengen in de repository van Adafruit, ik gewoon toegevoegd aan de sources.list. En ten slotte, zoals Docker beelden uit te als root voeren, de afbeelding niet vergt de GPIO-Admin project om een deel van de afbeelding. U kunt deze afbeelding zien in uw lokale Docker beeldbank:
$ docker images<br>REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE<br>rpi-nodejs latest f9a415a3f49b 2 minutes ago 151.1 MB<br>resin/rpi-raspbian jessie f9b109c91ac9 3 months ago 119.7 MB
Beeld van de toepassing
Laat nu een afbeelding die gebruikmaakt van onze nieuwe NodeJS afbeelding voor onze toepassing maken. Verder te gaan met de instructies we moeten installeren en NPM pakket en toevoegen van onze broncode.
Teruggaan naar de bovenliggende map voor "rpi-nodejs" en maak een nieuwe map met de naam "rpi-onoff" en veranderen in het. Eerst maakt u een nieuw bestand met de naam "test.js" met de volgende inhoud:
// button is attaced to pin 17, led to 18<br>var GPIO = require('onoff').Gpio, led = new GPIO(18, 'out'), button = new GPIO(17, 'in', 'both');<br><br>// define the callback function function light(err, state) { // check the state of the button // 1 == pressed, 0 == not pressed if(state == 1) { // turn LED on led.writeSync(1); } else { // turn LED off led.writeSync(0); } }<br><br>// pass the callback function to the<br>// as the first argument to watch()<br>button.watch(light);
En maak nu een ander bestand met de naam "Dockerfile" met de volgende inhoud:
FROM rpi-nodejs<br>MAINTAINER vipercmd<br> RUN npm install onoff<br> WORKDIR /app ENTRYPOINT ["node", "/app/test.js"]<br> COPY test.js /app/
De eerste regel van de Dockerfile verklaart dat dit beeld zal worden gebaseerd op ons nieuw gecreëerde rpi-nodejs imago. Dit is een voorbeeld van hergebruik van gemeenschappelijke basis beelden voor verschillende projecten. Het voordeel is dat al uw toepassingsservice/afbeeldingen zijn gebaseerd op dezelfde bovenliggende.
De run lijn zal brengen in de afhankelijkheid voor onoff via de npm package manager.
Tot slot een map gemaakt in het beeld en het test.js script is gekopieerd naar het. Het ingangspunt vertelt Docker dat wanneer de afbeelding is uitgevoerd en aangebracht in een container in het test.js script met behulp van knooppunt uitvoeren.
Compileren en uitvoeren van deze afbeelding:
$ docker build -t rpi-onoff .<br>$ docker run --privileged -d rpi-onoff
De "bevoorrechte" optie moet worden opgegeven omdat dit beeld R/W heeft toegang nodig tot de GPIO pinnen. Nu dat de toepassing wordt uitgevoerd, drukt u op de knop en Bekijk de LED-turn in- en uitschakelen.