LoginSignup
5
6

More than 5 years have passed since last update.

RaspberryPi3(ラズパイ)にDockerでPython+bottle+MySQL環境構築する!【試行錯誤編】

Last updated at Posted at 2016-09-04

はじめに

「優しいIT」という理念の基、ITコンサルタントをしている亀井亮介と申します!
現在、仕事では要求分析・要件定義を中心に上流工程をしていますが、主業務以外でプログラムも書いているので、技術的な記事を書きます!
優しいIT活動の一環として「教育用ようにプログラミング可能なPCを安価に提供する」理念の「Raspberry Pi 3(通称ラズパイ)」 で製作したモノ・サービス・プログラムを紹介します!

目的

ラズパイにDockerでPython-MySQL環境を構築します。
ラズパイはアーキテクチャが、大きく異なるためイメージが少なく苦戦しました。
まずは、試行錯誤の過程を記録します。
うまくいったら、簡単構築編を記載します!

アーキテクチャの違い

ラズパイはarmv7lアーキテクチャベースなので、Dockerもarmv7lアーキテクチャベースのイメージを使う必要がありますが、少ないのが現状です。

ラズパイのイメージを探す時

ラズパイで使えるイメージは"rpi-"が付いているので、探す時に参考にしてください

目次

  1. 準備
  2. hypriot/rpi-python を立ち上げる
  3. Python3インストールに必要なライブラリなどをインストール
  4. Python3をインストール
  5. pip3をインストール
  6. Python開発に必要なツールをインストール
  7. bottleをインストールする準備
  8. サーバが動作しているかを確認
  9. MySQLドライバーをインストール
  10. データベースにデータを作成
  11. アプリケーションサーバにスクリプトを置く
  12. アプリケーションを起動

1. 準備

Dockerや開発環境が揃っていない方は、下記を参照してください。
Dockerがインストールされていれば飛ばしてもOKです!

1-1. Dokcerをインストール

RaspberryPi3(ラズパイ)にDockerをインストールを参照してください!

1-2. 便利な機能(SSH・VNC・AFP)

Raspberry Pi 3インストール→無線LAN→日本語入出力→Macから操作(SSH・VNCサーバ・AFP)の下記章を実装すると便利です。

  1. SSHでアクセス
  2. VNC設定(MacからラズパイをGUIで操作)
  3. AFP設定(Macでラズパイのファイルシステムにアクセス)

2. hypriot/rpi-python を立ち上げる

hypriotと名乗る海賊(笑)が、ラズパイ向けのイメージを提供しているので、ありがたく使います。

hypriot/rpi-pythonを起動し、bashでログイン
sudo docker run -it hypriot/rpi-python /bin/bash

…と思ったら、このイメージはPython2.7系なのね…(2016年9月4日現在)
Python3系にしたいので、インストールします。

3. Python3インストールに必要なライブラリなどをインストール

いつものおまじない(ライブラリの更新とアップデート)
# apt-get update
# apt-get upgrade -y
必要そうなライブラリをインストールしてみる
# apt-get install -y vim
# apt-get install -y sudo
# apt-get install -y wget
# apt-get install -y git

4. Python3をインストール

4-1. Python3インストールに必要なライブラリをインストールします。

Python3インストールに必要なライブラリをインストール
# apt-get install -y build-essential libncursesw5-dev libgdbm-dev libc6-dev zlib1g-dev libsqlite3-dev tk-dev libssl-dev openssl libbz2-dev libreadline-dev

4-2. Python3をインストール

Python3はソースからコンパイルします。
(Python3インストール絡みで、makeとmake installを10年振りに触ったりしています)

Python3のソースをダウンロード
# wget https://www.python.org/ftp/python/3.5.2/Python-3.5.2.tgz

圧縮されているPython-3.5.2.tgzをtarで展開します。

Python-3.5.2.tgzを展開
# tar xvf Python-3.5.2.tgz 

移動します。

移動
# cd Python-3.5.2

makeでインストールします。
(時間がかかります)

makeでインストール
# ./configure && make && make install

インストールが終わったら確認します。

Python3インストールを確認
# python3 -V

5. pip3をインストール

pip3をインストール
# apt-get install -y python3-pip
pip3をバージョンアップ
# pip3 install --upgrade pip
pip3インストールを確認
# pip3 -V

6. Python開発に必要なツールをインストール

詳細を知りたい方はグーグル先生に聞いてください。

仮装開発環境構築virtualenv
# pip3 install virtualenv
軽量フレームワークbottle
# pip3 install bottle
Pythonのインタラクティブモード拡張ipython
# pip3 install ipython
コーディングスタイル/シンタックスのチェックflake8
# pip3 install flake8

7. ユーザを作成

グループとユーザを作成
# groupadd web
# useradd -d /home/bottle -m bottle
作ったユーザでログイン
# su -m bottle
$ 

問題なし!

8. サーバが動作しているかを確認

vimでindex.htmlを作成(ユーザはbottle)
$ vim index.html
index.html
<html>
<body>
はろーわーるど
</body>
</html>
シンプルHTTPで起動
$ python3 -m http.server 8080
Serving HTTP on 0.0.0.0 port 8080 ...

ブラウザでアクセス
ラズパイとDocker.png

9. MySQLドライバーをインストール

git cloneでmysql-connector-pythonをダウンロード

gitクローン
# git clone https://github.com/mysql/mysql-connector-python.git
移動
# cd mysql-connector-python
ビルドしてインストール
# python3 ./setup.py build
# python3 ./setup.py install

10. データベースにデータを作成

一旦、アプリケーションサーバを抜けます。
Control + P, Control + Qと入力します。

データベースサーバにログインします。
すでに起動していれば次のコマンドでログインします。

データベースサーバにログイン
pi@raspberrypi $ sudo docker exec -it {データベースサーバのコンテナ名}
MySQLにログイン
mysql_server # mysql -u{ユーザ名} -p
(パスワードを入力)
データベースにアクセス(すでにある前提)
mysql> use sample;
テーブルを作成
mysql>
CREATE TABLE `users` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(255) DEFAULT NULL,
  KEY `id` (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
データをインサート
mysql>
INSERT INTO `users` (`id`, `name`) VALUES (1, 'pyhons');
MySQLを抜ける
mysql> quit;
データベースのコンテナを抜ける
mysql_server # (Contrl + p, Control + q)

11. アプリケーションサーバにスクリプトを置く

アプリケーションサーバにログイン
pi@raspberrypi $ sudo docker exec -it {アプリケーションサーバのコンテナ名}
適当な場所に移動
# cd /home/bottle
server.pyを作成
# vim server.py
server.py
from bottle import route, run
# MySQLドライバはmysql.connector
import mysql.connector
# hostのIPアドレスは、$ docker inspect {データベースのコンテナ名}で調べる
# MySQLのユーザやパスワード、データベースはdocker-compose.ymlで設定したもの
connector = mysql.connector.connect(
            user='python',
            password='python',
            host='178.10.0.3', # データベースサーバのIPアドレス
            database='sample'  # 作成したデータベース
)

cursor = connector.cursor()
cursor.execute("select * from users")

disp = ""
for row in cursor.fetchall():
    disp = "ID:" + str(row[0]) + "  名前:" + row[1]

cursor.close
connector.close

@route('/hello')
def hello():

    return "DBから取得 "+disp

run(host='0.0.0.0', port=8080, debug=True, reloader=True)

12. アプリケーションを起動

アプリケーション起動
# /usr/local/bin/python3 /home/bottle/server.py

ブラウザで開くと
スクリーンショット 2016-09-04 14.18.55.png

次の記事では、Dockerfileとdokcer-compose.ymlで一発で起動を目論みます。
(でっきるかな?でっきるかな?)

サイトマップ

Raspberry Pi 3 (ラズパイ)セットアップ

Raspberry Pi 3インストール→無線LAN→日本語入出力→Macから操作

Raspberry Pi 3 にDockerを乗せてPython+MySQL環境を構築!

RaspberryPi3(ラズパイ)にDockerをインストール
RaspberryPi3(ラズパイ)にDockerでPython+bottle+MySQL環境構築する!【簡単構築編】
RaspberryPi3(ラズパイ)にDockerでPython+bottle+MySQL環境構築する!【試行錯誤編】

Raspberry Pi 3でエアコン一体型パソコン「airpi」を作る!

Raspberry Pi 3でエアコン一体型パソコン「airpi」を作る!

ついに…Raspberry Pi 3でpythonを使いラジコンを作る!

ボタン押している間モーターが動く
磁石を近づけている間モータが動く
磁石を近づけるとモータが動き、自動で止まる

Raspberry Pi 3 (ラズパイ)とpythonで遊ぼう ラズパイ奮闘の記録

Raspberry Pi 3でプログラミングをする Node-REDと普通にプログラミング
Raspberry Pi 3でpythonを使いLEDを光らせる(Hello World)
Raspberry Pi 3でスイッチの状態を検出する
Raspberry Pi 3でpythonを使いサーボモータを動かす
Raspberry Pi 3でpythonを使いモータードライバーを使いモータを制御する!
Raspberry Pi 3でpythonを使いスライドスイッチを検出する!
Raspberry Pi 3でpythonを使い磁石スイッチを検出する!
Raspberry Pi 3でpythonを使い温度を検出する!
Raspberry Pi 3でpythonを使いブザーを鳴らす!
Raspberry Pi 3でpythonを使いA/Dコンバーターでアナログ信号を検出する!
Raspberry Pi 3でpythonを使い「明るさ」を検出する!
Raspberry Pi 3でpythonを使い「温度(A/Dコンバーターを利用)」を検出する!
Raspberry Pi 3でpythonを使い「7セグメントLED」に出力する!
Raspberry Pi 3でpythonを使いスイッチ制御でLEDを光らせる!
Raspberry Pi 3でpythonを使い暗くなったらLEDを光らせる!

テスト駆動開発を重点においた規則

コーディング規則「優しいコードを書こう」(FuelPHP)
命名規則「3ヶ月後の自分自身に優しく、チームに優しく、まだ見ぬメンバーに優しく」

Docker+PythonでWebアプリケーション開発

Docker上のCentOSにPython3と、関連ライブラリpip, virtualenvとフレームワークDjango, bottle, Flaskのインストール!これらをまとめたDockerfile付き!

開発しやすい環境構築(Docker+PHP)

Dockerを利用しApacheにPHP環境 + Eclipseを連携
Dockerを利用したFuelPHP開発環境構築
Docker利用したFuelPHP開発環境の初期設定とscaffoldを利用してCRUDスケルトン作成
FuelPHPのデータベースマイグレーション

5
6
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
6