docker for internet of things

58
DOCKER FOR INTERNET OF THINGS 4DEVOPS + DOCKER ITALIA 27-01-2017

Upload: francesco-uliana

Post on 07-Feb-2017

182 views

Category:

Software


0 download

TRANSCRIPT

Page 1: Docker for internet of things

DOCKER FOR INTERNET OF THINGS4DEVOPS + DOCKER ITALIA

27-01-2017

Page 2: Docker for internet of things

FRANCESCO ULIANA@warrior10111

github.com/francescou

www.uliana.it/francesco

Page 3: Docker for internet of things

INTRODUCTION

Page 4: Docker for internet of things

INTERNET OF THINGSconnected devicescommunicationlow power

Page 5: Docker for internet of things

DOCKERpack, ship and run any application as a lightweightcontainerhardware-agnostic and platform-agnosticswarm mode

Page 6: Docker for internet of things

MICROSERVICESservice-oriented architectures (SOA)flexible, independently deployable so�waresystems.

Page 7: Docker for internet of things

EXAMPLE PROJECThttps://github.com/francescou/docker-for-IoT

Page 8: Docker for internet of things

light sensors networkcollect sensors dataautomatically adapt light temperatureweb application to monitor/interoperate with thesystem

Page 9: Docker for internet of things
Page 10: Docker for internet of things

HARDWARE

Page 11: Docker for internet of things

Raspberry pi (ARM)

Page 12: Docker for internet of things

ESP8266 (+ some sensors)

Page 13: Docker for internet of things
Page 14: Docker for internet of things
Page 15: Docker for internet of things

GETTING STARTED

Page 16: Docker for internet of things

HYPRIOT OSdd if=hypriot-rpi-...imgof=/dev/mmcblk0 bs=1M

ssh [email protected]

edit hostname in /boot/device-init.yaml

https://blog.hypriot.com/

Page 17: Docker for internet of things

docker info

Page 18: Docker for internet of things

it works on every machine running Docker with oneexception.

Raspberry pi CPU architecture is ARM - apps you usehave to be packaged specifically for ARM architecture!

Page 19: Docker for internet of things
Page 20: Docker for internet of things

docker run -p 80:80 hypriot/rpi-busybox-httpd

Page 21: Docker for internet of things

SWARM MODEdocker swarm init --advertise-addr

<MANAGER-IP>

docker swarm join --token SWMTKN-...192.168.99.100:2377

docker node lshttps://docs.docker.com/engine/swarm/swarm-

tutorial/create-swarm/

Page 22: Docker for internet of things

RPI CLUSTER MONITORINGInfluxDBGrafanaTelegraf

Page 23: Docker for internet of things
Page 24: Docker for internet of things

docker service create \ --name influxdb \ --network tick \ --publish 8086:8086 \ --constraint 'node.hostname==pi-clear' \ --mount type=bind,source=/influxdb/,destination=/var/lib/influxdb/ \ francesco-arch:5000/influxdb:1.0

Page 25: Docker for internet of things

TELEGRAF INPUTScpudiskdiskiomemprocessesdocker

Page 26: Docker for internet of things

docker service create \ --name telegraf \ --network tick \ francesco-arch:5000/telegraf:1.5

Page 27: Docker for internet of things

dashboard - Grafana

Page 28: Docker for internet of things

docker service create \ --name grafana \ --network tick \ --publish 3000:3000 \ --constraint 'node.hostname==pi-clear' \ --mount type=bind,source=/grafana/,destination=/var/lib/grafana/ francesco-arch:5000/grafana:1.0

Page 29: Docker for internet of things
Page 30: Docker for internet of things

SENSORS DATACOLLECTION

Page 31: Docker for internet of things

MQTT - async communicationTelegraf (input mqtt)

Page 32: Docker for internet of things

MQTTpublish/subscribe messaging transport protocol.Lightweight and Bandwidth Efficient

Page 33: Docker for internet of things
Page 34: Docker for internet of things

MQTT BROKER(i.e. )https://github.com/mcollina/mosca

Page 35: Docker for internet of things

docker service create \ --name mosca \ --network tick \ --publish 1883:1883 \ francesco-arch:5000/mosca:1.1

Page 36: Docker for internet of things
Page 37: Docker for internet of things

REAL TIME MONITOR...websockets!

Page 38: Docker for internet of things

Node.js + socket.iovar app = require('http').createServer(handler) var io = require('socket.io')(app); var mqtt = require('mqtt') var client = mqtt.connect('mqtt://mosca')

client.on('connect', function () { client.subscribe('sensors/#'); });

app.listen(8180);

io.on('connection', function (socket) { client.on('message', function (topic, message) { var value = message.toString().split('=')[1]; socket.emit('news', { value: value

Page 39: Docker for internet of things
Page 40: Docker for internet of things

LIGHT SWITCHclient = paho.Client() client.connect("mosca", 1883, 60) client.publish("status/switch", payload='switch light=' + str(status), qos=

Page 41: Docker for internet of things

FLASK: PYTHONMICROFRAMEWORK

from flask import Flask app = Flask(__name__)

@app.route("/") def hello(): return "Hello World!"

if __name__ == "__main__": app.run()

Page 42: Docker for internet of things
Page 43: Docker for internet of things

ALERTING

Page 44: Docker for internet of things

grafana alertingsensors datasystem metricsmultiple notification systems (e.g. slack, e-mail...)

Page 45: Docker for internet of things
Page 46: Docker for internet of things

LOGS

Page 47: Docker for internet of things

multiple servicesmultiple containersmultiple docker hosts

Page 48: Docker for internet of things

docker logs -f grafana.1.7io0044bl8

Page 49: Docker for internet of things

multi tail?grep?alerting?

Page 50: Docker for internet of things

LOG CENTRALIZATIONelasticsearch + logstash + kibana (elastic stack)graylog2fluentd

Page 51: Docker for internet of things
Page 52: Docker for internet of things

FLUENTDhttp://www.fluentd.org/guides/recipes/docker-logging

Page 53: Docker for internet of things

docker run --name hello --log-driver fluentd --log-opt fluentd-address=pi-lagom:24224 hypriot/rpi-alpine echo hello

$ tail -1 /data/docker.20170121.b5469f127f89950d6.log

20170121T201522+0000 docker.659579b7be4f {"container_id":"...","container_name":"/hello", "source":"stdout","log":"hello"}

Page 54: Docker for internet of things

CHATBOT (Node.js)https://github.com/howdyai/botkit

var Botkit = require('./lib/Botkit.js');

var controller = Botkit.slackbot({ debug: true, });

var bot = controller.spawn({ token: process.env.token }).startRTM();

controller.hears(['hello', 'hi'],'direct_message,direct_mention,mention' bot.reply(message, 'Hello.'); });

Page 55: Docker for internet of things

PUTTING IT ALL TOGETHERtraefik to reverse proxy

light switchgrafanareal time monitoring

Page 56: Docker for internet of things

HEALTH CHECKINGHEALTHCHECK CMD curl --fail

http://localhost:3000/health || exit1

Page 57: Docker for internet of things

YES BUT...WHY???real world use caseslow bandwidth / low processing powerenforce resiliency

Page 58: Docker for internet of things

Q&A