C августа 2016 года стало возможным использовать docker на Raspberry Pi. Это дало возможность сократить время настройки и запуска приложений для Интернета Вещей до нескольких минут.
В этом посте продемонстрирую преимущества docker и opensource кода на одной конкретной задаче.
Недавно у меня возникла задача организовать систему "умного дома" на объекте, где нет проводного интернета. Поискав на Github я наткнулся на отличный проект некоего Sergio. В нём Raspberry Pi превращается в точку доступа всего одной командой:
sudo docker run -d -t \
-e INTERFACE=wlan0 \
-e CHANNEL=6 \
-e SSID=runssid \
-e AP_ADDR=192.168.254.1 \
-e SUBNET=192.168.254.0 \
-e WPA_PASSPHRASE=passw0rd \
-e OUTGOINGS=eth1 \
--privileged \
--net host \
sdelrio/rpi-hostap:latest
Настройка "из коробки" устраивала всем, кроме того, что не было доступа в интернет через интерфейс eth0 (встроенный в Raspberry Ethernet порт). В моём случае нужно было подключить к точке доступа устройство, на котором нет WiFi модуля, но есть Ethernet.
Изучив, как устроен оригинальный код, я сделал fork, в котором Ethernet порту автоматически присваивается статический IP адрес и настраиваются правила iptables. В оригинальную команду запуска добавилась всего одна строчка, содержащая собственно нужный статический IP адрес, ETHERNET_IP (маска подсети 24 по умолчанию) :
sudo docker run -d -t \
-e INTERFACE=wlan0 \
-e CHANNEL=6 \
-e SSID=runssid \
-e AP_ADDR=192.168.254.1 \
-e SUBNET=192.168.254.0 \
-e WPA_PASSPHRASE=passw0rd \
-e OUTGOINGS=eth1 \
-e ETHERNET_IP=192.168.255.3 \
--privileged \
--net host \
pavelsr/rpi-hostap2
Всё заработало на ура. Получившийся docker image выложил на Docker Hub.
Помимо Raspberry Pi таким же образом можно превратить в точку доступа любой одноплатный компьютер, на который может быть установлен Docker: OrangePi, BananaPi, Onion, C.H.I.P. и др. Это особенно удобно когда доступ в интернет осуществляется через USB модем. Далеко не все роутеры, имеющие USB порт, умеют работать с USB модемами, да и если есть завалявшаяся малинка почему бы не сэкономить на железе ;)
P.S. Рекомендую покупать USB модем, для которого есть Hilink-прошивки. Что это такое и какие преимущества даёт читайте этом посте.