現時点では、新しい機能の開発や受け入れは行っておらず、重大ではないバグの修正も行っていません。
この Maven プラグインは、Maven を Docker と統合します。
設計目標は次のとおりです。
Dockerfile
は、Docker プロジェクトを構築する方法です。それがこのプラグインで使用されるものです。それらは必須です。mvn package
と入力すると、Docker イメージが取得されます。 mvn deploy
と入力すると、イメージがプッシュされます。mvn dockerfile:build
とその後のmvn dockerfile:tag
およびその後のmvn dockerfile:push
問題なく入力できます。これにより、 mvn dockerfile:build -DalsoPush
のようなものも必要なくなります。代わりに、単にmvn dockerfile:build dockerfile:push
と言うことができます。このプロジェクトはオープン行動規範に準拠しています。参加することにより、この規範を遵守することが期待されます。
リリースのリストについては変更ログを参照してください
このプラグインには Java 7 以降および Apache Maven 3 以降が必要です (dockerfile-maven-plugin <=1.4.6 の場合は Maven >= 3 が必要で、その他の場合は Maven >= 3.5.2 が必要です)。統合テストを実行したり、プラグインを実際に使用するには、動作する Docker セットアップが必要です。
その他の例については、統合テスト ディレクトリを参照してください。
特に、高度なテストでは、 helios-testing
を使用して統合テストされた 2 つのマイクロサービスで構成される完全なサービスを紹介します。
これにより、実際のプラグインがmvn package
でイメージをビルドし、 mvn deploy
でプッシュするように設定されます。もちろん、明示的にmvn dockerfile:build
と指定することもできます。
< plugin >
< groupId >com.spotify</ groupId >
< artifactId >dockerfile-maven-plugin</ artifactId >
< version >${dockerfile-maven-version}</ version >
< executions >
< execution >
< id >default</ id >
< goals >
< goal >build</ goal >
< goal >push</ goal >
</ goals >
</ execution >
</ executions >
< configuration >
< repository >spotify/foobar</ repository >
< tag >${project.version}</ tag >
< buildArgs >
< JAR_FILE >${project.build.finalName}.jar</ JAR_FILE >
</ buildArgs >
</ configuration >
</ plugin >
対応するDockerfile
次のようになります。
FROM openjdk:8-jre
MAINTAINER David Flemström <[email protected]>
ENTRYPOINT ["/usr/bin/java", "-jar", "/usr/share/myservice/myservice.jar"]
# Add Maven dependencies (not shaded into the artifact; Docker-cached)
ADD target/lib /usr/share/myservice/lib
# Add the service itself
ARG JAR_FILE
ADD target/${JAR_FILE} /usr/share/myservice/myservice.jar
重要な注意事項
ビルド アーティファクトを参照する最も Maven らしい方法は、おそらく、「ターゲット」ディレクトリを参照するためにproject.build.directory
変数を使用することでしょう。ただし、これにより絶対パスが作成され、Dockerfile の ADD コマンドではサポートされません。このようなソースは Docker ビルドのコンテキスト内に存在する必要があるため、相対パスで参照する必要があります。 #101を参照
ビルド ディレクトリを参照する方法として${project.build.directory}
を使用しないでください。
ビルドにこのプラグインを使用すると、多くの利点があります。
このプラグインを使用すると、Docker キャッシュをより一貫して利用できるようになり、Maven の依存関係をイメージ内にキャッシュできるため、ビルドが大幅に高速化されます。また、 maven-shade-plugin
回避することも奨励され、ビルドが大幅に高速化されます。
もう次のようなことを言う必要はありません。
mvn package
mvn dockerfile:build
mvn verify
mvn dockerfile:push
mvn deploy
代わりに、次のように言うだけで十分です。
mvn deploy
基本構成では、これによりイメージが正しいタイミングで構築され、プッシュされるようになります。
このプラグインは Docker イメージをビルドするときにプロジェクトのメタデータを添付するため、別のプロジェクトの Docker 情報に依存できます。この情報を任意のプロジェクトに追加するだけです。
< dependency >
< groupId >com.spotify</ groupId >
< artifactId >foobar</ artifactId >
< version >1.0-SNAPSHOT</ version >
< type >docker-info</ type >
</ dependency >
これで、依存していたプロジェクトの Docker イメージに関する情報を読み取ることができます。
String imageName = getResource ( "META-INF/docker/com.spotify/foobar/image-name" );
これは、別のプロジェクトの Docker イメージの最新バージョンが必要な統合テストに最適です。
docker-info
タイプをサポートするには、POM (または親 POM) に Maven 拡張機能を登録する必要があることに注意してください。
< build >
< extensions >
< extension >
< groupId >com.spotify</ groupId >
< artifactId >dockerfile-maven-extension</ artifactId >
< version >${version}</ version >
</ extension >
</ extensions >
</ build >
あなたのプロジェクトは次のようになります。
a/
Dockerfile
pom.xml
b/
Dockerfile
pom.xml
これらのプロジェクトを Fig、docker-compose、または Dockerfile で動作するその他のシステムで使用できるようになりました。たとえば、 docker-compose.yml
次のようになります。
service-a :
build : a/
ports :
- ' 80 '
service-b :
build : b/
links :
- service-a
これで、 docker-compose up
とdocker-compose build
期待どおりに動作するようになります。
使用法に関するドキュメントを参照してください。
認証に関するドキュメントを参照してください。
Maven リリースをカットするには:
mvn clean [-B -Dinvoker.skip -DskipTests -Darguments='-Dinvoker.skip -DskipTests']
-Dgpg.keyname=<key ID used for signing artifacts>
release:clean release:prepare release:perform
Github でリリースを作成するにはgren
を使用します。
gren release