『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