码头工人容器内的Maven非常缓慢

时间:2017-10-12 15:19:50

标签: macos performance maven docker

我尝试使用maven

设置Docker容器来构建我的java项目

我已经创建了我的Docker文件FROM maven:3.2-jdk-7并构建了图像。

当我执行时:

  

docker run -it --rm --name my-maven-project -v" $ PWD":/ usr / src / app -v   " $ HOME" /。m2:/root/.m2 -w / usr / src / app -v" $ HOME" / .ssh:/root/.ssh test   mvn clean package -Dmaven.test.skip = true

大约需要20分钟才能完成..但如果我在我的主机上运行相同的mvn命令则需要2分钟

我尝试使用

为容器提供更多内存
  

-m 4gb

但它并没有改变任何东西,看着这个容器勉强使用超过2G的码头统计数据

我从OSX运行所有这些

我有什么需要做的,以便在适当的时间内完成maven吗?我非常惊讶它在主机上花了2分钟就需要这么多..

这是码头统计数据在maven建造10分钟后所说的话。

CPU: 201.13% 
Mem usage  / limit : 2.508GiB
 MEM %  : 62.69%
NET I/O: 3.01kB / 861B
BLOCK I/O: 57.7MB / 2.23MB
PIDS: 38

- 编辑 - 事实证明,当使用安装的音量时,Docker for mac不能很好地播放。 为了避免必须git克隆容器内的项目,我首选使用-v" $ PWD":/ usr / src / app

要测试我已经直接git克隆了容器中的app表单,现在构建需要正常的时间(4分钟)

请注意,git clone需要... 6分钟!相反(在主机上1分钟)所以从git clone到最终构建总共需要10分钟这是荒谬的。

所以当使用装载音量时,OSX和Docker是一个很大的禁忌......

1 个答案:

答案 0 :(得分:1)

我使用与您相同的docker run语法(docker run -v src:dest)遇到了同样的问题。在OSX主机上花费大约30秒的Maven构建在我的容器中花费了大约4分钟。我没有完全解决它,但是切换为显式使用绑定安装使我的构建从大约4分钟减少到大约1.5分钟。对于我的用例而言,这仍然不是可以接受的构建时间增加,但是可以帮助其他人。尝试将docker run命令切换为此:

docker run --name=my-maven-project -it \ 
--mount type=bind,source="$(pwd)",destination=/usr/src/app,consistency=delegated <docker image name>

注意:一致性选项最后仅在OSX上有效,并且具有其他两个值,其中两个值都可能更适合您的情况。出于好奇,我尝试了这三个选项,委托和缓存选项之间的构建时间是可比的,与此同时,一致选项的速度几乎和以前一样慢(毫不奇怪)。这是文档:

https://docs.docker.com/storage/bind-mounts/

因此,不幸的是,尽管绑定挂载“非常高效”,但在进行Maven构建时,至少在OSX上,它们的速度显然仍然是本地文件系统的两倍。运气会随着时间的推移而改善。