我正在开发一个Yesod应用程序,我想使用Docker进行部署。我正在使用stack
进行构建,并且当使用stack exec -- yesod devel
进行本地交互时,应用可按预期工作。我现在想把它放在远程服务器上,使用Docker进行部署。
我意识到我可以
假设路线#2,我有以下Dockerfile:
FROM haskell:7.10
MAINTAINER stevejb <stevejb>
RUN mkdir /yesodapp
COPY config /yesodapp/config
COPY static /yesodapp/static
COPY ./.stack-work/dist/x86_64-linux/Cabal-1.22.4.0/build/sjb-app/sjb-app /yesodapp/sjb-app
EXPOSE 3000
ENTRYPOINT ["/yesodapp/sjb-app"]
然而,这没有做任何事情。当我尝试从容器内手动启动应用程序时,它不会执行任何操作。我想我在这里缺少一些简单的东西。
在stack.yaml
,
image:
container:
name: stevejb/sjb-app
base: fpco/stack-run
add:
config: /app/config
static: /app/static
然后,
$ stack image container
Sending build context to Docker daemon 30.08 MB
Sending build context to Docker daemon
Step 0 : FROM fpco/stack-run
---> db9b2a858ef5
Step 1 : ADD ./ /
---> 69d4ae832c0e
Removing intermediate container 4c6dd4edc16d
Successfully built 69d4ae832c0e
$ $ docker run --rm -p 3000:3000 stevejb/sjb-app
*** Running /etc/my_init.d/00_regen_ssh_host_keys.sh...
*** Running /etc/rc.local...
*** Booting runit daemon...
*** Runit started as PID 17
*** Running sudo -EHu root PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin /usr/bin/env -- bash...
*** sudo exited with status 0.
*** Shutting down runit daemon (PID 17)...
*** Killing all processes...
另外,我注意到这不会生成Dockerfile
。 yesodweb dockerfile是手工制作的吗?
答案 0 :(得分:1)
首先猜测您需要将工作目录更改为/yesodapp
。
由于您已经在使用Stack,因此您可能有兴趣尝试使用Docker容器生成功能。一个例子是yesodweb.com code base。在stack.yaml文件中,我们有:
resolver: lts-3.0
image:
container:
name: snoyberg/yesodweb
base: fpco/stack-run
add:
config: /app/config
static: /app/static
然后运行stack image container
会生成snoyberg/yesodweb
Docker镜像。
您可能还有兴趣查看我用于yesodweb.com的Kubernetes deployment scripts。