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

Docker 如何获取远程最新的maven tar.gz文件?,docker,dockerfile,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 . 问题是: 我希望

我想在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 .
问题是:

  • 我希望它能找到最近的服务器,而不是这个硬编码的
    http://ftp.twaren.net/
  • 我不想在Dockerfile中硬编码版本3.3.3,我希望通过某种方式进行分析,并获得最新版本。Dockerfile中是否仍有要解析/dom select的内容
  • 您可能会问为什么不干脆
    yum安装maven
    ?因为我已经安装了jdk8,但是
    epel
    存储库中的maven依赖于jdk7,jdk7将安装旧版本并将其设置为默认值
  • 非常感谢

    我希望它能找到最近的服务器,而不是这个硬编码的服务器

    我只是照搬了他们做的。这至少可以让你从更官方的网站下载,而不是从随机镜像下载。但这并不一定能解决距离问题

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

    这里没什么。与你的问题最直接相关的是,你可以自己写一些东西来解析这些信息,并在Dockerfile中使用它们。然而,这将是复杂的,而且可能很脆弱

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

    综上所述,Docker 1.9获得了一个标志,允许您在构建时指定要在
    Dockerfile
    中使用的变量。通过这种方式,您可以在映像中传递要构建的maven版本,而无需修改
    Dockerfile
    。听起来这也会让你的生活更轻松


    希望这一切都有帮助

    对于2,您可以看到我如何获得最新版本的软件(captvty),I short
    runversion=$(wget-q-O-http://captvty.fr/ |grep-o-m1'captvty-.*.zip'| sed's/captvty-\(.*\).zip/\1/'))&&wget-O/dev/nullhttp://captvty.fr/ &&wget-O/tmp/Captvty.ziphttp://captvty.fr/?captvty-$version.zip&&unzip-d~/Captvty/tmp/Captvty.zip&&rm/tmp/Captvty.zip
    ,您可以在