Arukasで初めてのDocker + Sinatraアプリケーションをデプロイした話

覚え書きというか日記的な感じ！٩(๑❛ᴗ❛๑)۶

## どういうわけか？
<img src="https://qiita-image-store.s3.amazonaws.com/0/25109/eb7f0359-aa00-fca8-cef1-a82dd6b1caab.png" width="400">

- [Arukas｜Dockerホスティング](https://arukas.io/)
- [さくらインターネット、コンテナ型仮想化技術「Docker」を利用した新たなホスティングサービス「Arukas」を開発](https://www.sakura.ad.jp/press/2016/0427_arukas/)

みんな大好き、さくらちゃんがDockerホスティングサービス（のオープンβテスト）を始めていました。

最近はナウくてイケイケなWeb屋さんはDockerで本番デプロイだぜ〜みたいな感じですが、
僕は全然Dockerをドカドカ使えていないため、この機会に挑戦してみようと思いました。
ゴールデンウィークだしね！

## やったこと
### 1. アプリをつくる
- [rutan/zoint2](https://github.com/rutan/zoint2)

Dockerだからといって特別なことは特にしなくても大丈夫でした。
ローカルにファイルを作ったりするようなコードを書いてしまうと消えちゃうのでまずいですが、そもそもそんなアプリはHerokuにもデプロイできないので書かないから大丈夫です٩(๑❛ᴗ❛๑)۶
Herokuのときと同じつもりでアプリをつくります。

また、Herokuではないですが、 `Procfile` を作成してforemanで起動できるようにしておくと何かと便利です。

### 2. アプリを含んだDockerイメージを作るリポジトリをGitHubにつくる
- [rutan/zoint-docker](https://github.com/rutan/zoint-docker)

Arukasは現時点（2016-05-05）ではDockerHubの公開イメージしかデプロイできないみたいです。オープンβテストだしね。
なので、DockerHubに公開するためのイメージを作成するためのリポジトリを作成します。

イメージを作成するDockerfileはこんな感じ。

```:Dockerfile
FROM ruby:2.3.1

RUN apt-get update && apt-get -y install git build-essential
RUN cd /usr/local && \
    git clone git://github.com/creationix/nvm.git nvm && \
    . /usr/local/nvm/nvm.sh && \
    nvm install 6.0.0 && nvm alias default 6.0.0
RUN gem install bundler --no-document

RUN cd ~ && git clone https://github.com/rutan/zoint2.git
RUN cd ~/zoint2 && \
    . /usr/local/nvm/nvm.sh && npm install --unsafe-perm && \
    bundle install -j4
COPY start.sh /start.sh

CMD ./start.sh
```

```bash:start.sh
#!/bin/bash
cd ~/zoint2
bundle exec foreman start
```

フツーのSinatraアプリだったらnodeとかいらないので、もうちょっとシンプルにできそうですね…
CSSとJSをwebpackでビルドしたいので頑張って入れています。

### 3. DockerfileのリポジトリをDockerHubとリンクする
- [https://hub.docker.com/r/rutan/zoint/](https://hub.docker.com/r/rutan/zoint/)

僕はてっきり自分でビルドしてDockerHubにpushしないといけないものだと思っていたのですが、DockerHubはGitHubのリポジトリから自動的にイメージをビルドする機能があるとのこと。

- [DockerhubのAutomated buildを試す - Qiita](http://qiita.com/jagaximo/items/4cbda778a10fd37f68e6)

べんり〜。
ということで、さっき作ったリポジトリを結びつけるとイメージが公開されます。
「ビルド始まらないんだけど！」となったらDockerHubの `Build Settings` ページに行くと手動で実行できます。

### 4. Arukasでアプリを作成、公開する
<img src="https://qiita-image-store.s3.amazonaws.com/0/25109/64e25691-eaa8-9ed4-4c40-ab7f4c3aabc0.png" width="400" alt="Arukasの様子です">

先ほどつくったイメージを指定してアプリを追加します。
インスタンス数とかも増やせるようですが、今回はアプリの性質上1つにします。

エンドポイント名を指定すれば `好きな文字列.arukascloud.io` で公開できます。
独自ドメインも設定できるようになるといいな :pray: 

また、ENVも設定できますが20個までしか設定できないようです。
僕はアプリを作っているとENVの設定項目を増やしすぎるクセがあるので、この辺りは気をつけていきたいですね……

アプリケーションの作成後に起動ボタンを押して1分くらい待つとデプロイ完了ですよ！

## 感想
- よかった
    - はじめてのDockerデプロイだったけど、Herokuみたいな環境になれていればあんまり違和感ない
    - 手元でイメージが動くか確認してからデプロイできるのはすごく便利
    - DockerHubも思ってたような怖い場所ではなかった
- わからん
    - アプリを更新したときのイメージ更新はどうしたらいいんだろう？
        - [commit IDを書き換える](https://github.com/rutan/zoint-docker/commit/3d9248407f4805ca76589162b4126a48b6fe0f93) みたいなことをしてるんだけど、もっといい方法ないかな…
    - Arukasでイメージ更新したいときどうしたらいいんだろう？
        - 今は「停止！」→「起動！」を超高速クリックしています（※1〜2分くらいサービスが死ぬ）

Docker、前に環境構築でつまづいたことがあってニガテイメージが結構あったのですが、最近はMacへのインストールも簡単だし、もうちょっといろいろ使ってあげたい気になりました。
がんばるぞい！

## おまけ：本日デプロイしたもの
<img src="https://qiita-image-store.s3.amazonaws.com/0/25109/90c3db0d-4ab0-9070-1559-2832ccf0518d.png" width="400">

- [Zoint - 今日も一日がんばるぞい！カウンター https://zoint.arukascloud.io/](https://zoint.arukascloud.io/)

2年くらい前に作ったサービスの作り直し版です。
Twitterで延々に「がんばるぞい」なツイートを検索して、日々の「ぞい数」を表示します。
以前つくったものは数字がカウントアップするだけだったので、
今回は、某動画サービスみたいにツイートが画面を流れるようにしてみました٩(๑❛ᴗ❛๑)۶

9月までArukasのβテストやってるみたいだし、アニメ放送中はだいじょうぶだよね…？