15 min/d

ぼうずやのにっき

stack docker をためすなど

bouzuya/bbn-json-hs をつくっている。公開分は stack new しただけのものだけど……。

bbn-json-hs は blog.bouzuya.net へ JSON を取得しにいき、簡素化した JSON を返す API server ……になる予定。特に難しい要素はない。簡単なリクエストの処理・外部サービスとの通信・レスポンスの JSON の構築、あとはインフラや CI などを確かめたかった。

あわせて stack docker をためした。 Docker 内で stack のサブコマンドを実行してくれる。詳細は Docker integration - The Haskell Tool Stack を参照。

確かに Docker コンテナ内で実行してくれるのだけど、ビルドされたものや依存関係にあるパッケージなどはすべて Docker コンテナの外(ホスト)側にあって、 volume でマウントしている。そのため、そのイメージをそのまま使えるわけではない。うーん。持ち回せるのかと思ったのだけど……。 persist オプションなどを工夫すればできそうだけど、パット見た感じちょっと違いそう。仮に別で Dockerfile をつくったときも、コンテナの内側で stack build したとき stack.yamldocker: enable: true が書いてあるものだから、docker の中で docker を使おうとしてしまう。面倒だ。そこまで動きに差が出ないだろうと信じて、結局 stack dockerfalse に戻した。

Dockerfile は特に工夫せず、stack setup して stack build するだけ。本当は $HOME/.stack のキャッシュを目的として *.cabalstack.yaml のタイムスタンプを調整したりしないといけないんだろうけど、面倒なので割愛した。結果的には何度も依存関係にあるパッケージをビルドすることになり、ひどく時間がかかった。軽く検索していると Dockerfile には cabal を用いたものばかりで stack を用いたものは見かけなかった。時期や容量の問題なのだろうか。ぼくは面倒なので stack で進めている。イメージも stack build で使われているものをそのまま使っている。手抜きだ。

本当は、今日中にもうすこしつくって Heroku や ECS に載せるつもりだったのだけど、ダメだった。とりあえず、つくるものは決めたので、ゴールデンウィーク最終日の明日こそは。