Haskell入門 の10章は、 SQLite への依存があったりして Windows で試すのは若干面倒だったので、 Docker for Windows で試せるようにした。
https://github.com/hiratara/Haskell-Nyumon-Sample/compare/docker/chap10
docker/chap10
ブランチを持ってきて、Docker for Windows が動いている環境でこんな感じで動かせる。
$ docker-compose build $ docker-compose run --rm --service-ports weight-recorder # ソースをいじって stack build したいとき $ docker-compose run --rm weight-recorder build weight-recorder
docker hubに stack dockerコマンド用のイメージがある ので、LTSが一致しているものを持ってきてベースイメージにしている。なお、残念ながら stack dockerコマンドはWindows非対応 なので今回の目的には使えない。
Windowsで作業ディレクトリを単純にバインドマインティングすると、
Installing executable(s) in /work/.stack-work/install/x86_64-linux/lts-8.24/8.0.2/bin /work/.stack-work/install/x86_64-linux/lts-8.24/8.0.2/bin/.copyFile5117023052084420925.tmp: copyFile: hardware fault (Input/output error) Completed 2 action(s).
のように微妙なエラーが出たりすることがあるので、 docker-compose
でデータボリュームを作ったりしている。後、何も考えずに Docker 化すると、docker-compose build
時の stack
の初期化が時間がかかりすぎてあまりにも辛いので、キャッシュが働くように COPY
前にある程度パッケージをビルドするようにしてたりする。
後、かんたんのためにDBを作業ディレクトリに置いていたのがきつくなったので、軽く手を入れて環境変数から指定できるようにした。 /data
以下にDBを置いている。