2015-10-15 59 views
1

我想在我的碼頭集裝箱中安裝maven。這是我的Dockerfile:如何抓取遠程最新的maven tar.gz文件?

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選擇?
  3. 你可能會問爲什麼不只是yum install maven?因爲我安裝了jdk8,但是epel存儲庫中的maven依賴於jdk7,它將安裝舊版本並將其設置爲默認值。

非常感謝。

+1

對於2,你可以看到我是如何得到最新版本的軟件(captvty),我簡稱'RUN版= $(wget -q -O- http://captvty.fr/ | grep -o -m 1 'captvty - 。*。zip'| sed's/captvty - \(。* \)。zip/\ 1 /')&& wget -O/dev/null http://captvty.fr/ && wget -O/tmp/Captvty.zip http://captvty.fr/?captvty-$version.zip && unzip -d〜/ Captvty /tmp/Captvty.zip && rm/tmp/Captvty.zip'從Dockerfile中可以看到:?//forum.ubuntu-fr.org/viewtopic.php ID = 1809831 – user2915097

回答

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。聽起來像這樣會讓你的生活更輕鬆。

希望這一切都有幫助!