ラズパイにサーバを構築する際の課題ラズパイのOSはLinux系OS"Raspbian"であるために、ウェブサーバのApacheやデータベースサーバのMySQLをインストールできますが、次のような課題もあります。不具合が発生した時に何が原因か分からない。ウェブサーバやデータベースのインストールや設定が煩雑ウェブサーバやデータベースサーバの設定のやり直しがやりにくい不具合が発生した時に何が原因か分からない。電子工作をする場合、温度取得などのシステムとウェブサーバなどの仕組みを同じマシンに構築するため問題が発生した時に、問題の切り分けが難しいです。ウェブサーバやデータベースのインストールや設定が煩雑ウェブサーバApacheやデータベースサーバのMySQLなどをインストールすることはできますが、インストールや設定に手間がかかります。経験された方もいると思いますが、きちんとメモなどを取らないと、正しい設定がわからなくなったり、なんとなく動いている状態になります。ウェブサーバやデータベースサーバの設定のやり直しがやりにくいウェブサーバやデータベースの設定をやり直したい場合、既存の環境に手を入れるために、動かなくなったらどうしようなどの不安が尽きません。Dockerで解決!不具合が発生した時に何が原因か分からない。Dockerはコンテナと呼ばれる技術を使っています。ラズパイ上に「仮想的なOS」を立ち上げます。アプリケーションコンテナ、データベースコンテナと明確に役割を分担し、ラズパイ本体のOSは温度センサ・湿度センサ・照度センサなどのハードウェアとの通信に特化します。不具合が発生した時に、原因を探る際に問題の切り分けがやりやすくなります!ウェブサーバやデータベースのインストールや設定が煩雑Dockerを利用すると、煩わしいミドルウェアのインストールから、難しい設定までが施されたイメージファイルを無料で利用できます!イメージファイルはオフィシャルのものから、細かくカスタマイズされたものもあり、プラモデルを組み立てるように組み合わせて使うことができます!ウェブサーバやデータベースサーバの設定のやり直しがやりにくいDockerはインストールや設定を1つのファイルにまとめることが可能です。設定が間違えていたら、そのファイルを元に、別の環境で実験をします。にっちもさっちもいかなくてもそのコンテんを捨ててしまい、うまくできている設定ファイルを再度呼び込みやり直しをすることが可能です。Dockerをラズパイで利用する場合の課題Dockerにも課題があります。Hubのイメージもほとんどがx86_64アーキテクチャのイメージです。Dockerの情報もまだ少ない状況です。取得した温度はプログラムからAPIを通して、データベースに登録されます。ウェブブラウザでは、データベースに登録された温度を表示することができます。これらは私のGithub上に置いてあり、比較的簡単な手順で、構築することができます。これがDockerの利点の一つです。準備DockerとGitがインストールされていない方は下記の記事をご覧ください。-d※私の環境で3分くらいでした。/docker-entrypoint-initdb.d/create_table.sql※SQLはサンプルのテーブルとデータを入力しています。exitを使うとコンテナも止めてしまいますので注意してください。.※私の環境で1時間くらいかかりました。/home/bottle/server.pyブラウザで開くと、下記のように表示されます。/app/server.pyデータベースに登録された温度データと、データ登録用のAPIです。@route('/list')温度データをSQLのSELECT文で取得し、一覧表示します。@route('/input_temperature')温度データを受け取り、SQLのINSERT文を生成し登録します。サーバのID(サンプルでは固定値。ユーザID(サンプルでは固定値。今後の拡張性を考慮)詳細は#で始まるコメントに記載をしています。本当はテンプレートを入れるとHTMLが綺麗になります。digital_temperature_sensor_for_api.py1分ごとに、温度センサから、I2C経由で温度を取得し、データ登録APIにアクセスします。/docker/mysql/my.cnfMySQLの日本語対応ファイルです。実動的に設定するので、深い説明は省略します。docker-compose.ymlデータベースコンテナとデータコンテナを一元管理します。Dockerfileアプリケーションコンテナの設定ファイルです。/initdb.d/create_table.sqlテーブル定義と、動作確認用の初期データを登録するSQLです。構築時に、コマンドを使い実行しています。README.mdGitで自動生成されるREADMEファイルです。動作には関係ありません。/vim/python.vimアプリケーションコンテナでvimを利用するときに、Pythonを書くために便利な設定をしています。こちらもアプリケーションのイメージを作成時に自動的にビルドしています。動作確認いよいよ動作確認です。cloneで作成されたフォルダに"digital_temperature_sensor_for_api.py"というファイルがあるので起動します。digital_temperature_sensor_for_api.py次のように温度が取得されます(画像には引数がついているのですが、無視されています)。取得した温度はプログラムからAPIを通して、データベースに登録されます。upLoginユーザーは見つかりませんでした。