Reputation: 288
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
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