如何抓取远程最新的maven tar.gz文件?

时间:2015-10-15 14:28:51

标签: docker dockerfile

我想在我的docker容器中安装maven。这是我的Dockerfile:

WORKDIR /usr/local
RUN wget http://ftp.twaren.net/Unix/Web/apache/maven/maven-3/3.3.3/binaries/apache-maven-3.3.3-bin.tar.gz -O - | tar -xz
WORKDIR /usr/local/bin
RUN ln -s ../apache-maven-3.3.3/bin/mvn .

问题是:

  1. 我希望它会找到https://maven.apache.org/download.cgi报告的最近的服务器,而不是这个硬编码的http://ftp.twaren.net/
  2. 我不想在Dockerfile中硬编码版本3.3.3,我希望有一些方法来分析https://maven.apache.org/download.cgi,并获得最新版本。无论如何在Dockerfile中解析/ dom-select?
  3. 您可能会问为什么不只是yum install maven?因为我已经安装了jdk8,但是epel存储库中的maven依赖于jdk7,它将安装旧版本并将其设置为默认值。
  4. 非常感谢。

1 个答案:

答案 0 :(得分:1)

  

我希望它会找到https://maven.apache.org/download.cgi报告的最近的服务器,而不是这个硬编码的http://ftp.twaren.net/

我刚刚复制了他们为official maven image所做的事情。这将至少让你从更正式的东西而不是随机镜像下载。虽然不会解决邻近问题。

  

我不想在Dockerfile中硬编码版本3.3.3 ......

这里几件事。与您的问题最直接相关的是,您可以编写一些内容来自行解析该信息并在Dockerfile中使用它。然而,这将是复杂的,并且可能很脆弱。

我认为将maven版本烘焙到构建中实际上是一件好事。这样你的构建是可重复的(而且很简单)。如果它在构建时抓住了最新版本,那么你获得的maven版本将无法控制。当您想要发布图像时,这会很难,因为您不会轻易知道如何标记它。例如是my-maven:3.3.3还是my-maven:3.3.4?您也可以不再将特定版本的maven图像绑定到Dockerfile的版本。

所有这一切,Docker 1.9获得了--build-arg标志,允许您指定在构建时Dockerfile中使用的变量。这样,您可以将要构建的maven版本传递到图像中,而无需修改Dockerfile。听起来这样会让你的生活更轻松。

希望这一切都有帮助!