Yesodのquick startが重い
題に掲げた問題を解決するための記事ではないです。HaskellのwebアプリケーションフレームワークYesod
のquickstartをDockerfileで行っただけの記事です。
Dockerfile
Dockerfileを書きます。
FROM haskell:latest MAINTAINER ushumpei ARG project_name RUN stack new $project_name yesod-sqlite \ && cd $project_name \ && stack build yesod-bin cabal-install --install-ghc \ && stack build CMD ["/bin/sh"]
ビルドします。任意のプロジェクト名を引数に取れるようにARG
で指定しています。引数を渡すには--build-arg
オプションをつけて、イメージ自体に名前をつけるために-t
オプションをつけます。
docker build -t yesod_sample . --build-arg project_name=sample
ビルドできたらコンテナを立ち上げます。めちゃくちゃ時間がかかります。。。
docker run -i -t --rm -p 3000:3000 yesod_sample /bin/bash
立ち上がったらコンテナのシェルが起動します、/
以下にARG
で指定した名前のプロジェクトができているので移動し、起動コマンドを実行します。
cd /sample stack exec -- yesod devel
コンパイル、マイグレーションが終わればlocalhost:3000
で「Welcome To Yesod!」のページにアクセスできるようになります。
感想
stack build yesod-bin cabal-install --install-ghc
がめちゃくちゃ重くて面倒でした。DockerHubに重い部分がいい感じに済んでいるイメージとかありそうですね。docker
とstack
とyesod
とわからないことが二つ以上あるともうしっちゃかめっちゃかです。