CentOS 7.2 で Hubot を Docker で動かしてみた

ブログ2つを纏めた転載

* [CentOS 7.2 で Docker 始めます](http://1bed.allright.life/?p=1912)
* [CentOS 7 で Hubot on Docker をやってみたメモ](http://1bed.allright.life/?p=1961)

---

新しく契約したサーバーに CentOS 7.2 を入れたので、Docker 入れて Hubot を試してみた
多くの人がやって掲載してるけど、自分のメモとして書く

## Docker のインストール

まずはインストールですが、CentOS 7.x からはデフォルトのリポジトリにあるので yum でインストールが可能

```
$ sudo yum install doker
$ sudo systemctl start docker
$ sudo systemctl enable docker
Created symlink from /etc/systemd/system/multi-user.target.wants/docker.service to /usr/lib/systemd/system/docker.service.
```

## 一般ユーザーで利用できるように設定

次に、一般ユーザー(miyamiya)が docker を使えるようにしました

```
$ sudo groupadd docker
$ sudo gpasswd -a miyamiya docker
Adding user miyamiya to group docker
$ sudo systemctl restart docker
```

一旦ここでログアウトして、ログインし直しました

ちなみにこの手順を取らないで一般ユーザで実行すると下記のようにエラーとなる

```
$ docker pull node
Using default tag: latest
Post http:///var/run/docker.sock/v1.20/images/create?fromImage=node%3Alatest: dial unix /var/run/docker.sock: permission denied.
* Are you trying to connect to a TLS-enabled daemon without TLS?
* Is your docker daemon up and running?
```

## Slack チームの作成と API Token の取得

か、か、割愛... (メモってないｗ


## node.js の環境を準備

Hubot は node.js で動作するので、node.js の環境を準備する
node.js 公式のイメージを利用する

イメージの取得

```
$ docker pull node
```

確認

```
$ docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             VIRTUAL SIZE
docker.io/node      latest              2c06219661ed        8 days ago          644.2 MB
```

## コンテナの起動

```
$ docker run --rm -it -v /etc/localtime:/etc/localtime:ro --name "bot-base" node /bin/sh
```

### オプションの説明

* \-\-name "bot-base"  
  コンテナ名は bot-base
* node  
  使うイメージは node.js  
* -v /etc/localtime:/etc/localtime:ro
  localetime はホストと Readonly で共有する(日本の時間にする)
* -it , /bin/sh  
  起動後シェルに入る
* \-\-rm  
  落とした時にコンテナを削除する

### コンテナ起動後

* Ctrl+p, Ctrl+q でコンテナから抜ける
* exit で抜けたらコンテナは削除される(\-\-rm をつけているため)


### \-\-rm をつけずにコンテナを手動で削除するとき

起動中のコンテナを確認

```
$ docker ps -a
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS               NAMES
2f12ee8929bb        bot-base            "/bin/sh"                  5 days ago          Up 5 days                               bot-base
```

コンテナの停止

```
$ docker stop bot-base
bot-base
```

コンテナの削除

```
$ docker rm bot-base
bot-base
```

## Hubot を動かせるまでひたすら頑張る

次の事ができるまで、試してみてメモって、またコンテナ最初からやってみてを繰り返した

* Hubot Generator をインストール
* Hubot を作成
* Hubot を起動

これを元にして Dockerfile を作った

```bash:Dockerfile
FROM node
MAINTAINER miyamiya

RUN npm install -g yo generator-hubot
RUN npm list -g yo generator-hubot
RUN useradd bot
RUN mkdir /home/bot && chown bot.bot /home/bot

USER bot
WORKDIR /home/bot
RUN  yo hubot --owner "miyamiya" --name "bot" --description "Hubot image" --adapter slack

CMD cd /home/bot/hubot; bin/hubot --adapter slack
```

## Hubot 用イメージを作成する

```
$ docker build -t bot-base .
Sending build context to Docker daemon 4.096 kB
Step 1 : FROM node
 ---> 2c06219661ed
Step 2 : MAINTAINER miyamiya
 ---> Using cache
 ---> 6cd0fb4b3b24
Step 3 : RUN npm install -g yo generator-hubot
 ---> Using cache
 ---> 86f522f924ca
  ：
（省略）
  ：
npm info ok 
 ---> ef4964132a7f
Removing intermediate container 2464b01dd061
Step 10 : CMD bin/hubot --adapter slack
 ---> Running in 2d797a7465fd
 ---> c64050988afd
Removing intermediate container 2d797a7465fd
Successfully built c64050988afd
```

作ったイメージの確認

```
$ docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             VIRTUAL SIZE
bot-base            latest              c64050988afd        18 minutes ago      698.8 MB
docker.io/node      latest              2c06219661ed        8 days ago          644.2 MB
```

### 作ったイメージの削除例

```
$ docker rmi bot-base:latest
Untagged: bot-base:latest
Deleted: c64050988afde89c14b937c6c1382a984b1a676e10b0a96bb1566a98ba23621e
Deleted: ef4964132a7f637a3862086cc64ffce53a5acd0d6a459d9a338e24ce98de96b7
Deleted: e7cec4828b1aa52b9840fe8cf099ee43d36ed802c68936c113ecc822a0882715
Deleted: cf0c4e3fff369b137cf68839abdc2869266cb846a9bbc247e4b517c667936d9e
Deleted: 5a6f64bcca492dc861035ed78cb3e8916a3e584832fdd0874f2482cc637a54b4
Deleted: f3f7ed898049035d93d38b951e012644abe8463b72efca2409aea8769c03cf26
Deleted: fa599f410d58049a73f9ea39e86fda7c50deb5b386d98be286f21ff0effeb225
```

又は ```docker rmi c64050988afd``` でも可

## 作ったイメージを使って起動する

```
$ docker run -itd -v /etc/localtime:/etc/localtime:ro -e "HUBOT_SLACK_TOKEN=slackから取得したtoken" --name "作成するコンテナ名" bot-base /bin/sh
```

### Slack で話しかけてみた

<img width="283" alt="hubot_example.png" src="https://qiita-image-store.s3.amazonaws.com/0/118961/7da4d734-0b68-b95b-891b-1d7df6d22183.png">