繁体   English   中英

如何使用外部存储库中的docker-compose和maven snaphot依赖项

[英]how to use docker-compose and maven snaphot dependencies from external repos

我有几个Java组件(WAR),它们都公开了Web服务,并且它们碰巧使用了相同的消息对象(DTO)。

这些组件都为DTO共享一个通用的Maven依赖关系,我们称之为“ messaging-dtos.jar”。 该公共依赖项具有版本号,例如,messaging-dtos-1.2.3.jar,其中1.2.3是该工件的Maven版本,该版本发布在nexus存储库等中。

在Maven世界中,除了docker之外,使用封闭版本依赖项可能会变得很乏味。 解决方案是Maven SNAPSHOTS。 例如,当您使用Eclipse IDE并将SNAPSHOT版本设置为依赖项时,这将导致IDE从当前工作空间获取该版本而不是从nexus获取,从而节省了时间,因为每次创建新版本时不必关闭版本更改。

现在,我不知道如何使这个开发周期与docker和docker-compose一起使用。 我有一个位于其自己的git repo中的“组件A”,以及一个位于另一个git repo中的Messenger-dtos.jar,它已在nexus中发布。

我的Dockerfile simpy有时会执行RUN mvn clean install全新RUN mvn clean install ,并为该依赖项提供了封闭版本(我们将Dockerfiles用于实际部署,但对于本地环境,则使用docker-compose)。 这适用于封闭版本,但不适用于SNAPSHOTS(至少不适用于本地SNAPSHOT,我可以在Nexus上发布SNAPSHOT,但这会产生另一组问题,不同的内容会覆盖同一SNAPSHOT,因此,我想不回来)。

我一直在考虑使用docker-compose卷,也许要挂载本地.m2中的任何内容,以便ComponentA在构建时可以找到快照依赖关系,但是这种感觉“不够干净”,构建会部分取决于Dockerfile中指定的内容,部分取决于本地构建的内容。 我不确定这是正确的方法。

有任何想法吗? 谢谢!

我建议维护两种方法:一种用于您的本地开发环境(即您的计算机),另一种用于在当前的CI工具中进行构建。

  • 对于您的本地开发环境:

    1. 提供War应用程序(例如Tomcat)的系统需求的Dockerfile
    2. docker-compose通过Eclipse或任何IDE使用内置的war应用程序安装卷。
  • 对于CI(不是您的开发环境):

    1. 一个非常相似的Dockerfile,但是可以构建您的应用程序(已安装maven)

一个实际的例子

我使用docker功能: 多阶段构建 用于Dev和CI环境的单个Dockerfile可能会拆分,但我只希望维护一个:

FROM maven as build
ARG LOCAL_ENV=false
COPY ./src /app/
RUN mkdir /app/target/
RUN touch /app/target/app.war
WORKDIR /app
# Run the following only if we are not in Dev Environment:
RUN test $LOCAL_ENV = "false" && mvn clean install

FROM tomcat
COPY --from=build /app/target/app.war /usr/local/tomcat/webapps

多阶段构建可节省大量磁盘空间,可丢弃构建中的所有内容,但COPY --from= 'ed除外。

然后,在Dev env中使用docker-compose.yml

version: "3"
services:
  app:
    build:
      context: .
      args:
        LOCAL_ENV: true
    volumes:
      - ./target/app.war:/usr/local/tomcat/webapps/app.war

在CI中构建(不是本地计算机):

# Will run `mvn clean install`, fetching whatever it needs from Nexus and so on.
docker build .       

在本地环境中运行(您的本地计算机):

# Will inject the war that should be available after a build from your IDE
docker-compose up

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM