DockerHubリポジトリの作成
DockerHubは、Docker社の提供するコンテナイメージのリポジトリです。インターネット上でコンテナイメージを公開したり、共有したりできます。
DockerHubにアカウントがない場合は、図のようにDockerHubのトップページからアカウントを作成できます。
作成するリポジトリは、(ユーザーID)/リポジトリ名です。ここではsusumutani3/iotkajiを作成しますが、今後は、susumutani3/iotkajiを皆さんが作成した名前に読み替えてください
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

