はじめに
「優しいIT」という理念の基、ITコンサルタントをしている亀井亮介と申します!
現在、仕事では要求分析・要件定義を中心に上流工程をしていますが、主業務以外でプログラムも書いているので、技術的な記事を書きます!
優しいIT活動の一環として「教育用ようにプログラミング可能なPCを安価に提供する」理念の「Raspberry Pi 3(通称ラズパイ)」 で製作したモノ・サービス・プログラムを紹介します!
目的
ラズパイにDockerでPython-MySQL環境を構築します。
ラズパイはアーキテクチャが、大きく異なるためイメージが少なく苦戦しました。
まずは、試行錯誤の過程を記録します。
うまくいったら、簡単構築編を記載します!
アーキテクチャの違い
ラズパイはarmv7lアーキテクチャベースなので、Dockerもarmv7lアーキテクチャベースのイメージを使う必要がありますが、少ないのが現状です。
ラズパイのイメージを探す時
ラズパイで使えるイメージは"rpi-"が付いているので、探す時に参考にしてください
目次
- 準備
- hypriot/rpi-python を立ち上げる
- Python3インストールに必要なライブラリなどをインストール
- Python3をインストール
- pip3をインストール
- Python開発に必要なツールをインストール
- bottleをインストールする準備
- サーバが動作しているかを確認
- MySQLドライバーをインストール
- データベースにデータを作成
- アプリケーションサーバにスクリプトを置く
- アプリケーションを起動
1. 準備
Dockerや開発環境が揃っていない方は、下記を参照してください。
Dockerがインストールされていれば飛ばしてもOKです!
1-1. Dokcerをインストール
RaspberryPi3(ラズパイ)にDockerをインストールを参照してください!
1-2. 便利な機能(SSH・VNC・AFP)
Raspberry Pi 3インストール→無線LAN→日本語入出力→Macから操作(SSH・VNCサーバ・AFP)の下記章を実装すると便利です。
- SSHでアクセス
- VNC設定(MacからラズパイをGUIで操作)
- AFP設定(Macでラズパイのファイルシステムにアクセス)
2. hypriot/rpi-python を立ち上げる
hypriotと名乗る海賊(笑)が、ラズパイ向けのイメージを提供しているので、ありがたく使います。
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インストールに必要なライブラリをインストールします。
# 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年振りに触ったりしています)
# wget https://www.python.org/ftp/python/3.5.2/Python-3.5.2.tgz
圧縮されているPython-3.5.2.tgzをtarで展開します。
# tar xvf Python-3.5.2.tgz
移動します。
# cd Python-3.5.2
makeでインストールします。
(時間がかかります)
# ./configure && make && make install
インストールが終わったら確認します。
# python3 -V
5. pip3をインストール
# apt-get install -y python3-pip
# pip3 install --upgrade pip
# pip3 -V
6. Python開発に必要なツールをインストール
詳細を知りたい方はグーグル先生に聞いてください。
# pip3 install virtualenv
# pip3 install bottle
# pip3 install ipython
# pip3 install flake8
7. ユーザを作成
# groupadd web
# useradd -d /home/bottle -m bottle
# su -m bottle
$
問題なし!
8. サーバが動作しているかを確認
$ vim index.html
<html>
<body>
はろーわーるど
</body>
</html>
$ python3 -m http.server 8080
Serving HTTP on 0.0.0.0 port 8080 ...
9. MySQLドライバーをインストール
git cloneでmysql-connector-pythonをダウンロード
# 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_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> quit;
mysql_server # (Contrl + p, Control + q)
11. アプリケーションサーバにスクリプトを置く
pi@raspberrypi $ sudo docker exec -it {アプリケーションサーバのコンテナ名}
# cd /home/bottle
# vim 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
次の記事では、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+PHP)
Dockerを利用しApacheにPHP環境 + Eclipseを連携
Dockerを利用したFuelPHP開発環境構築
Docker利用したFuelPHP開発環境の初期設定とscaffoldを利用してCRUDスケルトン作成
FuelPHPのデータベースマイグレーション