SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

DeveloperZine(デベロッパージン)- エンジニアの意思決定を支える技術情報メディア ProductZine

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

IoTをかじってみよう

IoTをかじってみよう(3)
~センサーのデータをWebサーバーに送付するmbedアプリケーションを作成する

DockerHubリポジトリの作成

 DockerHubは、Docker社の提供するコンテナイメージのリポジトリです。インターネット上でコンテナイメージを公開したり、共有したりできます。

 DockerHubにアカウントがない場合は、図のようにDockerHubのトップページからアカウントを作成できます。

図12 DockerHubトップ画面
図12 DockerHubトップ画面

 作成するリポジトリは、(ユーザーID)/リポジトリ名です。ここではsusumutani3/iotkajiを作成しますが、今後は、susumutani3/iotkajiを皆さんが作成した名前に読み替えてください

図13 DockerHubリポジトリ作成画面

図13 DockerHubリポジトリ作成画面

Dockerによるコンテナイメージの作成

 ここからは、開発環境のDockerを利用して、アプリケーションを実行するためのコンテナイメージを作成していきます。このときMySQL、PHP、nginxを導入したコンテナイメージにします。

MySQLの導入と準備

 Ubuntuの公式イメージにMySQLをインストールします。docker runコマンドで、Ubuntuのイメージをコンテナ名settingup1として実行し、同時にコンテナ上の/bin/bashにアクセスします。このとき、Ubuntuの公式イメージが自動でダウンロードされます。

$ sudo docker run --name settingup1 -it ubuntu /bin/bash

 次のコマンドを実行して、MySQLサーバーをインストールします。途中でrootユーザーのパスワード設定を求められます。好きなパスワードを設定してください。

Container> apt-get update
Container> apt-get -y install mysql-server

 コンテナ外部からのMySQLへのアクセスを許可するためmy.cnfを編集します。

Container> vi /etc/mysql/my.cnf

 変更箇所:bind-addressの行をコメントアウトします。

 MySQLサーバーを起動します。

Container> /usr/bin/mysqld_safe &

 MySQLサーバーへログインします。

Container> mysql -u root -p

 バージョン表示などのあとにMySQLサーバーのプロンプト(mysql>)が表示されます。

 続いてSampleIotDBという名前のデータベースを作成します。

mysql>  create database SampleIotDB;

 PHPアプリケーションからDB接続するためのユーザーを作成します。ここでは、user_iotとして、パスワードはpass_iotとします。

mysql> grant all on SampleIotDB.* to user_iot@localhost identified by 'pass_iot';
Query OK, 0 rows affected (0.30 sec)

 次のコマンドでユーザーIDが作成できていることを確認します。下記のように表示されます。

mysql> select user,host from mysql.user where user='user_iot';
+----------+-----------+
| user     | host      |
+----------+-----------+
| user_iot | localhost |
+----------+-----------+
1 row in set (0.00 sec)

 作成したSampleIotDBへ切り替えます。

mysql > use SampleIotDB;

 mbedのデバイスからデータを集めるテーブルを作成します。

 概要でも述べたように、デバイスID(deviceid)、温度(temperature)、メモ(memo)に加えて日時(datetime)も持たせることにします。データ型は、それぞれvarchar(8)、float、varchar(20)、timestampとします。

 プロンプトに対して次のSQLを入力してください。

mysql> create table sample1_tbl
    -> (deviceid varchar(8),
    -> temperature float(8),
    -> memo varchar(20),
    -> datetime timestamp);
Query OK, 0 rows affected (0.02 sec)

 テーブルが作成できていることを確認します。次のコマンドでテーブルの各列が正しくできていることを確認します。下のように表示されていればOKです。

mysql> describe sample1_tbl;
+-------------+-------------+------+-----+-------------------+-----------------------------+
| Field       | Type        | Null | Key | Default           | Extra                       |
+-------------+-------------+------+-----+-------------------+-----------------------------+
| deviceid    | varchar(8)  | YES  |     | NULL              |                             |
| temperature | float       | YES  |     | NULL              |                             |
| memo        | varchar(20) | YES  |     | NULL              |                             |
| datetime    | timestamp   | NO   |     | CURRENT_TIMESTAMP | on update CURRENT_TIMESTAMP |
+-------------+-------------+------+-----+-------------------+-----------------------------+
4 rows in set (0.00 sec)

 一旦接続を終了します。

mysql> quit

 そして、先ほど作成したuser_iotでSampleIotDBを指定してログインします。パスワード入力を求められますので、入力します。

Container> mysql -u user_iot -p SampleIotDB

 作成したsample1_tblテーブルを照会してエラーにならないことを確認します。

mysql> select * from sample1_tbl;
Empty set (0.00 sec)

 これでMySQLの導入と準備は完了ですので、接続を終了してMySQLも停止します。

mysql> quit

Container>mysqladmin shutdown --password=MySQL導入時に設定したrootのパスワード

 続いてコンテナのイメージを保存するためにコンテナから抜けます。Ctrl+p qを押します。

 抜けた後もコンテナがまだ稼働していることをdocker psコマンドで確認してdocker stopコマンドで停止します。

$ sudo docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
e91fcaa7afd2        ubuntu              "/bin/bash"         9 seconds ago       Up 8 seconds                            settingup1

$ sudo docker stop settingup1

 停止した後にこのコンテナのスナップショットをコンテナイメージとして保存します。

$ sudo docker commit <コンテナ名> <リポジトリ名>:<タグ名>

 DockerHubに作成したリポジトリに合わせて、<リポジトリ名>をsusumutani3/iotkaji、タグ名にはバージョンを持たせてv1とします。

$ sudo docker commit settingup1 susumutani3/iotkaji:v1

 次のようにdocker imagesコマンドで、susumutani3/iotkaji:v1のイメージが新しく作成されていることを確認します。

$ sudo docker images
REPOSITORY            TAG                 IMAGE ID            CREATED             VIRTUAL SIZE
susumutani3/iotkaji   v1                  597d3d82fd26        12 seconds ago      339.2 MB
ubuntu                latest              d55e68e6cc9c        4 days ago          187.9 MB

 さきほど停止したコンテナのスナップショットを削除しておきます。

$ sudo docker rm settingup1

次のページ
nginx、php5-fpm、php5-mysqlの導入と準備

この記事は参考になりましたか?

IoTをかじってみよう連載記事一覧

もっと読む

この記事の著者

谷口 督(日本アイ・ビー・エム株式会社)(タニグチ ススム)

2000年問題対応の時期にIT業界に入り、それ以来UNIX系のインフラ構築を担当。最近の関心事は、そろそろ出てきそうな画期的なテクノロジー探しや世の中が良くなるためのもの作りです。

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

CodeZine(コードジン)
https://codezine.jp/article/detail/9162 2016/01/27 14:00

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー