【发布时间】:2018-02-09 10:14:16
【问题描述】:
这是我的Dockerfile,但是如果我更改了java代码,然后在终端输入“docker-compose up -d --build”,maven会重新下载jar,如何避免重复下载?
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"
我精简了我的测试项目,然后使用maven的spring-boot插件
mvn spring-boot:run
要启动项目,现在先挂载 .m2 文件夹,然后运行 mvn 命令。 但是我改了java源码后,devtools没有自动加载,怎么解决?
这是我的 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"]
【问题讨论】:
-
将本地缓存
$HOME/.m2/repository挂载到您的 Docker 映像中...但是为什么要在 Docker 容器中构建呢?为什么不简单地通过 Dockerfile 将最终生成的 war/jar 文件复制到 Docker 容器中? -
@khmarbaise 本来想在容器中添加jar并运行,但是开发过程中代码变化比较频繁,过程显得过于繁琐。然后想着把$HOME/.m2/repository作为数据卷放到容器里,但是试了很多次,在执行mvn verify之前没有弄清楚如何将.m2目录挂载到容器中。
-
@khmarbaise 非常感谢您
标签: java maven docker docker-compose development-environment