【问题标题】:Maven inside docker container horribly slowdocker容器中的Maven非常慢
【发布时间】:2018-03-24 14:36:17
【问题描述】:

我正在尝试设置一个 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 测试 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

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

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

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

【问题讨论】:

  • 嗯,这取决于...第一次构建会更慢,直到 Maven 从远程存储库下载所有依赖项。之后,除非您重建实例,否则应该没问题。你试过不止一次吗? :)
  • 是的,如您所见,我正在安装已经具有所有依赖项的主机卷 (.m2)。所以容器中的maven不需要下载任何东西
  • 您运行的是当前版本的 docker 吗?它在 OS X 上的文件系统性能方面存在一些问题。
  • 输出是什么...?这是在下载依赖项时发生的,还是...?
  • 我正在运行版本 17.06.0-ce-mac19 (18663) 更新到 17.09.0-ce-mac35 (19611) 并没有解决问题。在容器上构建仍然需要 20 分钟

标签: macos performance maven docker


【解决方案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 上是这样。运气会随着时间的推移而改善。

【讨论】:

  • 我看到了相同的但不是带有“-v”绑定安装的安装?也许他们不是在发帖时,但文档指出: > -v "$(pwd):/app" - 将当前目录从容器中的主机绑定到 /app 目录 docker 似乎相当慢我和它不仅仅是 maven,terraform 也超级慢,而且以前不是这样,但我不确定这是从哪个版本开始的。
猜你喜欢
  • 1970-01-01
  • 2018-03-16
  • 2015-09-28
  • 2020-11-12
  • 1970-01-01
  • 2020-01-05
  • 2020-09-21
  • 1970-01-01
  • 2021-07-21
相关资源
最近更新 更多