BizStationブログ

ビズステーション株式会社の公式ブログです。

TransactdをDockerで試す(Ruby/2/17 PHP追記)

(2/17 追記)PHP用イメージと、Ruby/PHPのバージョンについて追記しました。


先日、Twitterで以下のツイートを見かけました。

確かに、Dockerイメージがあればすぐに試すことができますね。
ということで、Dockerの公式RubyイメージにTransactdクライアントを追加したイメージを作成しました。

transactd-ruby - Docker Hub

(2/17 追記)
このイメージは最新版のRuby(2/17現在は2.4)を使用していますが、Dockerfileを書き換えればRuby 2.1, 2.2, 2.3にもそのまま使用できます。
(/追記)

また、MySQLとTransactdについては、すでにイメージを作成してくださった方がいらっしゃるようです。

yokogawa/mysql-transactd - Docker Hub

これらのイメージを使用して、実際にTransactdのテストを実行してみます。

サーバ側

MySQLSvrという名前を付けて、Transactd入りのMySQLサーバのコンテナを実行します。

docker run -it --name MySQLSvr yokogawa/mysql-transactd /bin/bash

対話実行するよう-itオプションを付けているので、mysqldを起動後、実際にTransactdが動いているか確認します。

root@2c44d5533fca:/# /etc/init.d/mysql start
(略)
[info] MySQL Community Server 5.7.17 is started.

root@2c44d5533fca:/# mysql -uroot -p
mysql> show status like 'tr%';
+------------------------------+-------+
| Variable_name                | Value |
+------------------------------+-------+
| Transactd_cur_open_databases | 0     |
| Transactd_ha                 | 0     |
| Transactd_tcp_connections    | 1     |
| Transactd_tpool_connections  | 0     |
| Transactd_tpool_threads      | 0     |
+------------------------------+-------+
5 rows in set (0.01 sec)

無事にTransactdのステータスが表示されました。

テストをするためには、クライアント側からの接続を許可するようにアクセス権の設定をしなければなりません。
Dockerのコンテナには172.17.0.0/255.255.255.0の範囲のIPアドレスが割り振られるので、これを許可しておきます。

mysql> CREATE USER root@'172.17.0.0/255.255.255.0';
クライアント側

新しいターミナルを開き、クライアント側のコンテナを実行します。

docker run -it --link MySQLSvr:svr bizstation/transactd-ruby /bin/bash

Transactdのgemがインストールされていることを確認します。

root@1535b3aef141:/# gem which transactd
/usr/local/bundle/gems/transactd-3.7.2/lib/transactd.rb

テスト実行のためにrspecをインストールします。

root@1535b3aef141:/# gem install rspec

サーバのホスト名MySQLSvrを指定して、テストを実行します。

root@1535b3aef141:/# TRANSACTD_RSPEC_HOST=MySQLSvr \
> rspec -c /usr/local/bundle/gems/transactd-3.7.2/test/transactd_spec.rb

とても簡単に環境を用意できたと思います。
現在、PHPクライアント用のDockerイメージも作成中です。
ぜひTransactdを試してみてください!



2/17 追記

Dockerの公式PHPイメージにTransactdクライアントを追加したイメージを作成しました。

transactd-php - Docker Hub

このイメージは最新版のPHP(2/17現在は7.1)を使用していますが、Dockerfileを書き換えればPHP 7.0, 5.6にもそのまま使用できます。

サーバ側をRubyのときと同じように準備しておき、クライアント側としてコンテナを実行します。

docker run -it --link MySQLSvr:svr bizstation/transactd-php /bin/bash

テストのディレクトリにPHPUnitをインストールしてあるので、そこに移動してテストを実行します。

root@955e089e8c67:/# cd /transactd_client_3.7.2_php/tests/
root@955e089e8c67:/transactd_client_3.7.2_php/tests# TRANSACTD_PHPUNIT_HOST=MySQLSvr \
> ./phpunit.phar transactd_Test.php