【问题标题】:How to quickly integrate the maven project into the docker如何快速将maven项目集成到docker中
【发布时间】:2017-08-24 05:30:39
【问题描述】:

我有一个maven项目,项目结构如下:

父项目:

  1. 父项目:

    APorject.war

    BProject.war

  2. parentApiProject:

    AProjectApi.jar

    BProjectApi.jar

我想在打包项目的同时将以下四项复制到四个docker中,并且会运行起来。

有什么好的想法和技术解决方案吗?

【问题讨论】:

    标签: java maven docker docker-compose dockerfile


    【解决方案1】:

    我更喜欢在 jar/war 文件准备好之后构建映像(另一个选择是通过 plugin 将其与 maven 集成)。但是在这两个选项中,您都需要先创建一个 Dockerfile。

    您有 4 个应用程序,因此您需要 4 个容器(一个容器 - 要做一件事或运行一项服务)。每个容器都有自己的基础映像和设置,具体取决于您运行应用程序的方式。

    例如,Dockerfile 将 jar 文件复制到镜像并使用 openjdk 运行:

    FROM openjdk:8-jdk
    VOLUME /tmp
    
    COPY ./target/application.jar /application.jar
    RUN bash -c 'touch /application.jar'
    
    ENTRYPOINT exec java $JAVA_OPTS -jar /application.jar
    EXPOSE 7000
    

    要运行战争文件,您可能需要tomcat image

    为自定义应用程序添加 Dockerfile 后,下一步是创建一个 docker-compose.yml 文件。它将包括运行整个项目所需的所有容器(4 个您的自定义应用程序、数据库或任何其他服务)。

    version: '3'
    services:
      application:
        build: ./path_to_dockerfile
        ports:
          - 7000:7000
        environment:
          - DATABASE_PASSWORD=ASKWejuFy1aPL3dzNv
          - ... any other credentials or application configs should be passed by environment variables
          - JAVA_OPTS=-Xmx512m -Xms256m -Djava.security.egd=file:/dev/./urandom -Xdebug -Xrunjdwp:server=y,transport=dt_socket,suspend=n
        restart: always
        depends_on:
          - application-db
      application-db:
        build: ./path_to_db_dockerfile # you can set image name without dockerfile for db
        ports:
          - 5432:5432
        restart: always
        volumes:
          - db-data
        environment:
         - DATABASE_PASSWORD=ASKWejuFy1aPL3dzNv
    
      # 
      # Configuration for other containers
      #
    
    volumes:
      db-data:
    

    在那里,您将设置 Dockerfiles 的路径,创建具有依赖项的专用网络,一切准备就绪后,您可以使用 docker-compose up 命令运行它。

    【讨论】:

      【解决方案2】:

      首先你需要创建一个 Dockerfile。

      更多解释可以参考这里。

      How to dockerize maven project? and how many ways to accomplish it?

      【讨论】:

        【解决方案3】:

        您想要一个 Docker 容器来运行整个事情吗?如果是这样,您需要从基本 docker 映像开始。从您用于运行 Web 应用程序的 VM 的基本映像开始。然后将模块作为层添加到您的 docker 映像中,按照从最不易于更改到最易于更改的顺序排列。这将帮助您利用 docker 层缓存功能。

        【讨论】:

        • 项目比较复杂,是一个微服务,会有多个模块,在集成测试中,我想在各自的docker中运行测试
        • 当然,docker 非常适合微服务。您希望将所有微服务及其依赖项安装在各自的 docker 容器中。服务应通过 http/https 等相互通信。但是,这些容器中的每一个都需要在容器本身内具有其所需的依赖项(不会停留在主机操作系统文件系统访问等中。恕我直言,这打破了整个想法容器)
        猜你喜欢
        • 2017-10-04
        • 2023-03-29
        • 2011-10-15
        • 1970-01-01
        • 1970-01-01
        • 2011-02-06
        • 2014-05-11
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多