Dockerで立てたIRCに、Dockerで立てたHubotを常駐させますよ、という話
コンテナの相互関係
+---------------------+
|goldeneggg/centos |
| +------------------------+
+-| goldeneggg/centos-ngircd +-----------------------------+
| <-----+ goldeneggg/hubot-irc |
+------------------------+ | |
| |-+
+-----------------------------+ |
| goldeneggg/hubot |-+
+----------------------------+ |
|dockerfile/nodejs |
+--------------------------+
IRCサーバー (=ngircd)
- 拙作 を使用
Hubot
- goldeneggg/hubot Repository | Docker Hub Registry - Repositories of Docker Images
- node.jsが必要
- 公式で公開されている dockerfile/nodejs Repository | Docker Hub Registry - Repositories of Docker Images をベースコンテナとして使用した
- 元々hubot & hubot-irc で1つのコンテナにしようとしていたが、hubotが様々なチャットツールに対応しているメリットを活かす為、分けることにした
- (が、このあたりはどういう構成にするのがイケてるのかまだ自信が無いです)
- hubot-ircと分けたので、hubotコンテナでやる事は以下のステップまで
- coffeescriptとhubotをインストール(npm install)
- redis-serverをインストール・起動
- テスト用のbotをcreate
hubot-irc
- goldeneggg/hubot-irc Repository | Docker Hub Registry - Repositories of Docker Images
- 上記のhubotコンテナをベースコンテナとして使用
- このコンテナでやること
- hubot-ircをインストール(npm install)
- hubot-ircで必要な環境変数の設定
HUBOT_IRC_NICK
HUBOT_IRC_UNFLOOD
- ※
HUBOT_IRC_SERVER
,HUBOT_IRC_ROOMS
の2つも必要だが、IRCの実行状態に依存するのでdocker run -e <ENV>
で指定することにした
- 上記hubotコンテナで作成したbotをircモードで起動
- ※ irc以外のアダプタを追加したい場合は、接続先だけircから変更して同じような構成をコンテナを作成すれば良い(と思う)
実行&動作確認
- ircサーバーを起動する
- デフォルトで
#Test
というチャンネルを用意している
- デフォルトで
$ docker pull goldeneggg/centos-ngircd
$ docker run -t -d -p 6667:6667 goldeneggg/centos-ngircd
- 任意のircクライアントでircに接続する
- サーバー : コンテナが動いてるホストマシンのIP/ホスト名
- ポート : 6667
- チャンネル :
#Test
- ircコンテナのipアドレスを確認する
$ docker inspect <IRC_CONTAINER_ID> | grep IPAddress
"IPAddress": "172.17.0.46",
- hubotをircにjoinさせる
$ docker pull goldeneggg/hubot-irc
$ docker run -e HUBOT_IRC_SERVER=<ircコンテナのIPアドレス> -e HUBOT_IRC_ROOMS=#Test \
-t -d goldeneggg/hubot-irc
- hubotの動作状況を
ping
で動作確認 =>PONG
が返ってくればOK
> @hubot ping
PONG
- 追加した独自scriptの動作確認。
sushi
という文字列に反応してネタを返す
> sushi
はまち