2016-11-23 4 views
2

私のJavaアプリケーションを含むカスタムイメージを構築しています。 基本的に私はの中にmvn clean installと呼んでいます。 私はこのプロセスを高速化するためにRUN mvn -T 1C clean installを使用しています。イメージビルド中のマルチスレッド

これは、使用可能なCPUコアごとに1つのスレッドを使用します。これで十分でしょうか? mvnはどのように利用可能なCPUコアを計算しますか? VMのものではなく、ホストのCPUをチェックするために何かをする必要がありますか?私はMac用のDockerを使用しています(これは内部的には私が知っている限りxhyveを使用しています)。

アップデート:私は1つのモジュール(脂肪ジャー、組み込みのTomcatとスプリングブートアプリケーション)、Mavenの3.3.9、スレッドブーストなしの総所要時間は約30分を構築しています

。膨大なオーバーヘッドは、S3のプライベートレポから依存関係をダウンロードすることです。

+0

ドッカーは、仮想マシン(boot2docker)のVirtualBox上で実行されます。私はあなたがVirtualBoxを開いて、boot2docker VMを再設定できると思います。 – Tuan

+1

最初にいくつのモジュールを構築していますか?ビルドは '-T..'なしでどれくらいかかりますか?どのMavenバージョンを使用していますか? – khmarbaise

+0

@Tuan https://docs.docker.com/engine/installation/mac/ 'Mac用のDockerは、Mac向けの最新サービスです。これはネイティブMacアプリケーションとして動作し、xhyveを使ってDockerデーモンのためのDocker Engine環境とLinuxカーネル固有の機能を仮想化します。 ' – alkis

答えて

1

私の謙虚な意見によると、Dockerfile内のmavenによるアプリケーションのビルドは、メリットよりも多くの問題を引き起こすと思います。

新しいビルドを実行すると、ビルドは空になりますので、buildはすべてのdependencisをダウンロードするのに多くの時間を費やします。

ビルドで使用するスレッドを変更しても、パフォーマンスが向上するわけではありません。

mavenを使って1つのドッカーイメージを準備し、このイメージビルドにmavenキャッシュを移入するためにいくつかのmavenコマンドを実行してみることができます。 次は、このイメージをプロジェクトのベースとして使用します。

別の解決方法は、ダウンロード依存関係を別々にし、2つのRUNでビルドすることができます.Dockerキャッシュを使用すると、次のビルドが高速になる可能性があります。 Mac用

RUN mvn dependency:go-offline 
RUN mvn clean install 
+0

これはとても良いアイデアです。私はそれを試してみます。 – alkis