macos - docker容器中的Maven非常慢

标签 macos performance maven docker

我正在尝试设置一个 Docker 容器来使用 maven 构建我的 java 项目

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

当我执行:

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



但它并没有改变任何东西,查看 docker stats 容器几乎没有使用超过 2G

我正在从 OSX 运行所有这些

我需要做些什么才能在合适的时间内完成 maven 吗?我非常惊讶它在主机上需要 2 分钟。

这是 docker stats 在 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 在使用挂载卷时播放效果不佳。
为了避免必须在容器中克隆项目,我更喜欢使用 -v "$PWD":/usr/src/app

为了测试,我直接在容器中克隆了应用程序表单,现在构建需要正常的时间(4分钟)

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

所以是的,OSX 和 Docker 在使用挂载卷时是一个很大的禁忌......

最佳答案

我使用与您相同的 docker run 语法遇到了同样的问题(docker run -v src:dest)。在我的 OSX 主机上耗时约 30 秒的 Maven 构建在我的容器中耗时约 4 分钟。我没有完全解决它,但是切换到显式使用绑定(bind)挂载使我的构建从大约 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 上有效,并且有两个其他值,其中任何一个都可能更适合您的情况。出于好奇,我尝试了所有这三个选项,并且委托(delegate)选项和缓存选项之间的构建时间相当,同时一致选项几乎与我之前的方式一样慢(不足为奇)。这是文档:

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

因此,不幸的是,尽管绑定(bind)挂载“非常高效”,但在 maven 构建方面,它们显然仍然至少比本地文件系统慢两倍,至少在 OSX 上是这样。运气会随着时间的推移而改善。

关于macos - docker容器中的Maven非常慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46713288/

相关文章:

objective-c - 将 macOS 目标添加到混合 iOS 项目中——为什么它找不到 Objective-C 符号?

javascript - 合并 JavaScript 文件

java - Spring Boot上传BootRepackage可执行Jar

macos - 从 Mac OSX 访问 Centos Apache 服务器(在 Parallels 10 中托管)

objective-c - 通过在 objective-c 中双击打开文件

android - getItem 与 getItemAtPosition

performance - mongodb 许多插入\更新性能

android - maven部署到nexus

java - 如何正确使用从 swagger 规范生成的服务器 stub ?

ruby - 在 Mac OS X 上安装 Nokogiri gem 时出错