用于 Yesod 部署的 Dockerfile
Dockerfile for Yesod deployment
我正在开发 Yesod 应用程序,我想使用 Docker 进行部署。我正在使用 stack
进行构建,应用程序在使用 stack exec -- yesod devel
进行本地交互时按预期工作。我现在想把它放在远程服务器上,使用 Docker 进行部署。
我意识到我可以
- 让 Docker 文件编排编译并在本地构建
- 将二进制文件放入 Docker 映像,将映像推送到存储库,然后拉到服务器。
假设走路线 #2,我有以下 Docker 文件:
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是手工制作的吗?
第一个猜测是您需要将工作目录更改为 /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。
我正在开发 Yesod 应用程序,我想使用 Docker 进行部署。我正在使用 stack
进行构建,应用程序在使用 stack exec -- yesod devel
进行本地交互时按预期工作。我现在想把它放在远程服务器上,使用 Docker 进行部署。
我意识到我可以
- 让 Docker 文件编排编译并在本地构建
- 将二进制文件放入 Docker 映像,将映像推送到存储库,然后拉到服务器。
假设走路线 #2,我有以下 Docker 文件:
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是手工制作的吗?
第一个猜测是您需要将工作目录更改为 /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。