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

  • 12
    いいね
  • 0
    コメント

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

どういうわけか?

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

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

やったこと

1. アプリをつくる

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

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

2. アプリを含んだDockerイメージを作るリポジトリをGitHubにつくる

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
start.sh
#!/bin/bash
cd ~/zoint2
bundle exec foreman start

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

3. DockerfileのリポジトリをDockerHubとリンクする

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

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

4. Arukasでアプリを作成、公開する

Arukasの様子です

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

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

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

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

感想

  • よかった
    • はじめてのDockerデプロイだったけど、Herokuみたいな環境になれていればあんまり違和感ない
    • 手元でイメージが動くか確認してからデプロイできるのはすごく便利
    • DockerHubも思ってたような怖い場所ではなかった
  • わからん
    • アプリを更新したときのイメージ更新はどうしたらいいんだろう?
    • Arukasでイメージ更新したいときどうしたらいいんだろう?
      • 今は「停止!」→「起動!」を超高速クリックしています(※1〜2分くらいサービスが死ぬ)

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

おまけ:本日デプロイしたもの

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

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