用于Yesod部署的Dockerfile

时间:2015-10-27 06:01:24

标签: docker yesod

我正在开发一个Yesod应用程序,我想使用Docker进行部署。我正在使用stack进行构建,并且当使用stack exec -- yesod devel进行本地交互时,应用可按预期工作。我现在想把它放在远程服务器上,使用Docker进行部署。

我意识到我可以

  1. 让Dockerfile编排编译并在本地构建
  2. 将二进制文件放入Docker镜像中,将图像推送到存储库,然后拉到服务器。
  3. 假设路线#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... 
    

    另外,我注意到这不会生成Dockerfileyesodweb dockerfile是手工制作的吗?

1 个答案:

答案 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