『Go言語によるWebアプリケーション開発』(Mat Ryer著、鵜飼文敏監訳、牧野聡訳; O'Reilly Japan)の「第5章 分散システムと柔軟なデータの処理」ではNSQというメッセージキューソフトウェアを利用して、Twitterのツイートを分析します。同書内ではNSQの構築をローカルマシンに直接インストールしているのですが、Dockerを利用して構築することも可能です。本記事では、Dockerを用いたNSQの構築手順について、簡単にまとめておきます。
前提
動作確認を行った環境は次の通りです。
- Windows 10 Home
- Docker ToolBox
また環境変数DOCKER_HOSTは次の通りに設定されています。
DOCKER_HOST=tcp://192.168.99.100:2376
手順
まずはNSQのイメージを取得します。
docker pull nsqio/nsq
次にnsqlookupdを起動します。ここではコンテナ名をgo-webapp-nsqlookupdとしています。
docker run -d ^
--name go-webapp-nsqlookupd ^
-p 4160:4160 -p 4161:4161 ^
nsqio/nsq /nsqlookupd
最後にnsqdを起動させれば完了です(コンテナ名はgo-webapp-nsqd)。
docker run -d ^
--name go-webapp-nsqd ^
-p 4150:4150 -p 4151:4151 ^
nsqio/nsq /nsqd ^
--broadcast-address=192.168.99.100 ^
--lookupd-tcp-address=192.168.99.100:4160
わかりづらいのはnsqlookupdとnsqdで別のコンテナを起動する必要があるということ。また--broadcast-addressや--lookupd-tcp-addressに指定する値もわかりづらいのですが、おおよそ上記の通りに設定すればOKです。
おまけ
同書ではnsq_tailを利用しているのですが、Dockerを利用している場合はnsq_tail用にコンテナを作成します。たとえばvotesというトピックを対象にする場合、以下のコマンドを実行します。
docker run --rm nsqio/nsq /nsq_tail ^
--lookupd-http-address=192.168.99.100:4161 ^
-topic votes