Yesod部署的Dockerfile
我正在使用一个Yesod应用程序,我想用Docker进行部署。 我正在使用stack
进行构build,并且应用程序按照预期在使用stack exec -- yesod devel
进行本地交互时正常工作。 我现在想把它放在远程服务器上,使用Docker进行部署。
我意识到我也可以
- 让Dockerfile编译编译并在本地构build
- 把二进制文件放到一个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吗?
首先猜测是你需要把你的工作目录/yesodapp
。
由于您已经在使用Stack,因此您可能有兴趣尝试Docker容器生成function。 一个例子是在yesodweb.com代码库中 。 在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
图像。
您可能也有兴趣查看我用于yesodweb.com的Kubernetes部署脚本 。
- 当exec-opt native.cgroupdriver更改为“cgroupfs”时,docker无法正确运行?
- 有没有一个商定的UML图样式来logging或说明(Docker)容器在系统架构规范中的angular色?
- 在完成运行后检查非守护程序Docker容器
- 用Express和Docker暴露3000以外的端口
- Dockerfile错误:/ bin / sh:1:[“python”,:not found
- Docker和领事通过例子:需要澄清
- Docker和Cinder,可以在OpenStack中使用吗?
- Docker安装会导致主机无法访问
- 使用LXD的Kubernetes部署和本地使用的Docker镜像的位置