TransactdをDockerで試す(Ruby/2/17 PHP追記)
(2/17 追記)PHP用イメージと、Ruby/PHPのバージョンについて追記しました。
先日、Twitterで以下のツイートを見かけました。
transactd の入った docker image ができた。ただ、MySQL のプラグインはマニュアルを見る限り、my.cnf の plugin-load での指定と、sql での install plugin での指定で挙動が意図的に違うのが気になる。
— mapk0y (@mapk0y) 2017年2月2日
確かに、Dockerイメージがあればすぐに試すことができますね。
ということで、Dockerの公式RubyイメージにTransactdクライアントを追加したイメージを作成しました。
(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
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クライアントを追加したイメージを作成しました。
このイメージは最新版の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