wangbin
wangbin

Reputation: 288

How to use maven-docker on development-environment to avoid repeated download jars?

this is my Dockerfile,but if I changed the java code ,and then enter "docker-compose up -d --build" to terminal,maven will re-download the jars, how to avoid duplication of the download?

Dockerfile:

FROM maven:3.5.0-jdk-8
WORKDIR /app
COPY pom.xml .
COPY src ./src
RUN mvn verify
ENTRYPOINT ["java","-jar","target/cloud-user.jar"]

docker-compose.yml:

version: "2"
services:
  cloud-nginx:
    build: cloud-nginx
    image: registry.cn-beijing.aliyuncs.com/wangdali/cloud-nginx
    restart: always
    ports: ["80:80"]
  cloud-consul:
    image: consul:0.9.2
    command: consul agent -dev -client 0.0.0.0
  cloud-front:
    build: cloud-front
    image: registry.cn-beijing.aliyuncs.com/wangdali/cloud-front
    restart: always
    volumes:
      - ./cloud-front/static:/app
  cloud-user:
    build: cloud-user
    image: registry.cn-beijing.aliyuncs.com/wangdali/cloud-user
    restart: always
  mysql: 
    image: mysql:5.7.19
    hostname: mysql
    volumes: 
      - ./docker/mysql/data:/var/lib/mysql 
      - ./docker/mysql/conf:/etc/mysql/conf.d 
      - /etc/localtime:/etc/localtime
    ulimits: 
      nproc: 65535
    mem_limit: 1024m 
    restart: always 
    environment:
      MYSQL_ROOT_PASSWORD: root
    ports:
      - "3306:3306"

I streamlined my test project, and then use the spring-boot plugin for maven

mvn spring-boot:run

to start the project, now that mount .m2 folder first and then run mvn command. But after I changing the java source code ,it does not loading automatically by devtools, how to solve?

and this is my Dockerfile/docker-compose.yml :

Dockerfile:

version: "2"
services:
  user:
    build: user
    volumes:
      - $HOME/.m2/repository:/root/.m2/repository
      - ./user/src:/app/src
    ports:
      - "8080:8080"

docker-compose.yml:

FROM maven:3.5.0-jdk-8
WORKDIR /app
COPY pom.xml .
COPY src ./src
ENTRYPOINT ["mvn","spring-boot:run"]

Upvotes: 2

Views: 3094

Answers (1)

wangbin
wangbin

Reputation: 288

Resolved, I mount target folder to container,it's can be automatically loaded, which is the final dockerfile and docker-compose.yml, of course, in the production environment, we can not write:

Dockerfile:

FROM maven:3.5.0-jdk-8
WORKDIR /app
COPY pom.xml .
COPY src ./src
ENTRYPOINT ["mvn","spring-boot:run"]

docker-compose.yml

version: "2"
services:
  user:
    build: user
    volumes:
      - $HOME/.m2/repository:/root/.m2/repository
      - ./user/target:/app/target
    ports:
      - "8080:8080"
      - "5005:5005"

pom.xml:

    <plugins>
      <plugin>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-maven-plugin</artifactId>
        <configuration>
          <mainClass>cn.codeforfun.Application</mainClass>
          <jvmArguments>-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005</jvmArguments>
        </configuration>
      </plugin>
    </plugins>

Upvotes: 3

Related Questions