【问题标题】:how to write a dockerfile to run a sbt project in container如何编写 dockerfile 在容器中运行 sbt 项目
【发布时间】:2016-03-27 02:39:25
【问题描述】:

我想在不使用任何 sbt 插件的情况下手动编写 dockerfile。 我正在使用 sbt 0.13.8。我查看了 dockerfile 参考,但无法获得足够的洞察力来满足我的要求。演示会非常有帮助

【问题讨论】:

    标签: docker sbt


    【解决方案1】:

    如果您的意思是编写一个 Dockerfile 生成一个能够运行 sbt 项目的镜像,您可以查看William-Yeh/docker-sbt

    # Sbt on Java 7
    #
    # URL: https://github.com/William-Yeh/docker-sbt
    #
    # @see http://www.scala-sbt.org/release/tutorial/Manual-Installation.html
    #
    # Version     0.7
    
    FROM williamyeh/java7
    MAINTAINER William Yeh <william.pjyeh@gmail.com>
    
    
    ENV SBT_VERSION  0.13.8
    ENV SBT_JAR      https://repo.typesafe.com/typesafe/ivy-releases/org.scala-sbt/sbt-launch/$SBT_VERSION/sbt-launch.jar
    
    
    ADD  $SBT_JAR  /usr/local/bin/sbt-launch.jar  
    COPY sbt.sh    /usr/local/bin/sbt
    
    RUN echo "==> fetch all sbt jars from Maven repo..."       && \
        echo "==> [CAUTION] this may take several minutes!!!"  && \
        sbt
    
    
    VOLUME [ "/app" ]
    WORKDIR /app
    
    
    # Define default command.
    ENTRYPOINT ["sbt"]
    CMD ["--version"]
    

    【讨论】:

    • @oblivion 没问题。不要忘记阅读stackoverflow.com/help/accepted-answer
    • 谢谢 :) 嘿,关于给定 dockerfile 中使用的命令,我需要更多帮助。可以说我有一个文件夹,工作区。然后在 Workspace 中,我有一个名为“mydockerfile”的 dockerfile 和一个名为“demo”的 sbt 项目。在 demo > src > main > scala 中,我有一个可运行对象: object Runner extends App { println("Hello World") } 现在,我应该如何为 dockerfile INSTRUCTIONS 提供值,例如:ADD、RUN、VOLUME、WORKDIR 等然后还需要我需要执行的构建命令。那么我可以简单地使用: ...Workspace$ docker build 。 ?
    • @oblivion 如果您的 dockerfile 未命名为 Dockerfile(而是 mydockerfile),那么您需要使用 -f 选项:docker build -f mydockerfile -t myimagename .
    • @oblivion 假设您有一个全新的空文件夹。暂且不说 docker,您将在该文件夹中复制什么,以及从该文件夹运行什么命令以使您的 sbt 项目正确执行自身?一旦你知道了,你就知道在你的 docker 镜像中添加、复制或运行什么。
    • @here "因为图像大小很重要,强烈建议不要使用 ADD 从远程 URL 获取包;您应该改用 curl 或 wget。这样您可以删除不再需要的文件'已被提取,您无需在图像中添加其他图层。”
    【解决方案2】:

    您可以查看插件生成的 docker 文件:sbt-native-packager。应该提高你的初步理解。对于演示,请阅读一般 docker 教程,而不是坚持您想要在其中实际运行的内容。

    在 sbt docker:publishLocal 之后,您将在目标文件夹中获得图像名称和 dockerfile。您可以使用docker run -i MY_NAME 运行映像。

    【讨论】:

      猜你喜欢
      • 2021-04-26
      • 2022-01-09
      • 2016-03-26
      • 1970-01-01
      • 2014-02-21
      • 2017-01-27
      • 2021-12-03
      • 1970-01-01
      • 2021-02-16
      相关资源
      最近更新 更多