【问题标题】:Build docker image with jetty - when should I build?使用码头构建 docker 映像 - 我应该什么时候构建?
【发布时间】:2016-06-22 08:14:42
【问题描述】:

我正在“dockerizing”一个我想使用 jetty 运行的 java web 应用程序 (https://github.com/kermitt2/grobid)。

这里是 Dockerfile:

FROM jetty:9.3-jre8
ADD ./grobid-home/target/grobid-home-0.4.1-SNAPSHOT.zip /opt

RUN unzip /opt/grobid-home-0.4.1-SNAPSHOT.zip -d /opt && \
    rm /opt/grobid-home-0.4.1-SNAPSHOT.zip && \
    apt-get update && apt-get -y --no-install-recommends install libxml2

COPY ./grobid-service/target/grobid-service-0.4.1-SNAPSHOT.war \ 
     /var/lib/jetty/webapps/ROOT.war

当前的 docker 镜像运行良好,但它需要之前构建应用程序(它不能从新的 git 克隆构建)。 例如,我无法使用 docker HUB 构建系统运行构建。

最好的方法是什么?在构建镜像的同时构建 maven 项目,还是在构建成功完成后运行 docker?

【问题讨论】:

    标签: java docker maven build


    【解决方案1】:

    我假设您正在创建的 docker 映像用于生产。

    如果您创建一个获取源并构建战争的图像,您将必须嵌入:

    • JDK
    • 马文
    • 您的来源

    每一个都是完全无用的,并且在你的图像中占用大量空间,完全没有任何意义。

    所以,是的,IMO 你只是将战争添加到你的 docker 镜像中,而不是从内部构建。

    我认为你不应该在你的 maven 进程中构建你的 docker 镜像,这是两个独立的进程,你可以使用一些更高级别的脚本(或 jenkins 管道)来自动化

    【讨论】:

    • 确实,好点。谢谢。现在我有第二个问题,这个管道应该如何集成?假设我们有一个负责构建快照图像的 travis 构建,我如何实现第二次构建,也许是手动的,当触发时进行发布,并创建 docker 镜像? Docker HUB 不适合,因为它们需要先构建数据。有什么建议吗?也许是特拉维斯?我不确定...
    • 您可以使用 docker hub,您所要做的就是在 maven 存储库上发布您的工件,例如 sonatype:central.sonatype.org/pages/ossrh-guide.html 这样您在 dockerfile 中所要做的就是ADD http://theurlofyourjaronsonatype并让 travis 在每次部署 jar/war 时触发 docker 构建
    猜你喜欢
    • 2014-07-09
    • 2011-06-21
    • 2022-09-28
    • 1970-01-01
    • 2021-12-17
    • 1970-01-01
    • 2022-06-17
    • 2018-04-23
    • 1970-01-01
    相关资源
    最近更新 更多