Saat ini, kami tidak mengembangkan atau menerima fitur baru atau bahkan memperbaiki bug yang tidak kritis.
Plugin Maven ini mengintegrasikan Maven dengan Docker.
Tujuan desainnya adalah:
Dockerfile
adalah cara Anda membangun proyek Docker; itulah yang digunakan plugin ini. Itu wajib.mvn package
, Anda mendapatkan image Docker. Saat Anda mengetik mvn deploy
, gambar Anda akan dikirim.mvn dockerfile:build
dan kemudian mvn dockerfile:tag
dan kemudian mvn dockerfile:push
tanpa masalah. Ini juga menghilangkan kebutuhan akan sesuatu seperti mvn dockerfile:build -DalsoPush
; sebagai gantinya Anda cukup mengatakan mvn dockerfile:build dockerfile:push
.Proyek ini mematuhi Kode Etik Terbuka. Dengan berpartisipasi, Anda diharapkan menghormati kode ini.
Lihat changelog untuk daftar rilis
Plugin ini memerlukan Java 7 atau lebih baru dan Apache Maven 3 atau lebih baru (dockerfile-maven-plugin <=1.4.6 memerlukan Maven >= 3, dan untuk kasus lain, Maven >= 3.5.2). Untuk menjalankan tes integrasi atau menggunakan plugin dalam praktiknya, diperlukan pengaturan Docker yang berfungsi.
Untuk contoh lainnya, lihat direktori pengujian integrasi.
Secara khusus, pengujian lanjutan menampilkan layanan lengkap yang terdiri dari dua layanan mikro yang diuji integrasinya menggunakan helios-testing
.
Ini mengonfigurasi plugin sebenarnya untuk membuat gambar Anda dengan mvn package
dan mendorongnya dengan mvn deploy
. Tentu saja Anda juga dapat mengucapkan mvn dockerfile:build
secara eksplisit.
< 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
yang sesuai akan terlihat seperti:
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
Catatan penting
Cara paling Maven-ish untuk mereferensikan artefak build mungkin adalah dengan menggunakan variabel project.build.directory
untuk mereferensikan direktori 'target'. Namun, hal ini menghasilkan jalur absolut, yang tidak didukung oleh perintah ADD di Dockerfile. Sumber apa pun harus berada dalam konteks build Docker dan oleh karena itu harus direferensikan oleh jalur relatif . Lihat #101
Jangan gunakan ${project.build.directory}
sebagai cara untuk mereferensikan direktori build Anda.
Ada banyak keuntungan menggunakan plugin ini untuk bangunan Anda.
Plugin ini memungkinkan Anda memanfaatkan cache Docker secara lebih konsisten, mempercepat build Anda dengan memungkinkan Anda menyimpan cache dependensi Maven di image Anda. Hal ini juga mendorong menghindari maven-shade-plugin
, yang juga sangat mempercepat pembangunan.
Anda tidak lagi harus mengatakan sesuatu seperti:
mvn package
mvn dockerfile:build
mvn verify
mvn dockerfile:push
mvn deploy
Sebaliknya, cukup dengan mengatakan:
mvn deploy
Dengan konfigurasi dasar, ini akan memastikan bahwa gambar dibuat dan dikirim pada waktu yang tepat.
Anda dapat bergantung pada informasi Docker dari proyek lain, karena plugin ini melampirkan metadata proyek saat membangun image Docker. Cukup tambahkan informasi ini ke proyek apa pun:
< dependency >
< groupId >com.spotify</ groupId >
< artifactId >foobar</ artifactId >
< version >1.0-SNAPSHOT</ version >
< type >docker-info</ type >
</ dependency >
Sekarang, Anda dapat membaca informasi tentang image Docker dari proyek yang Anda andalkan:
String imageName = getResource ( "META-INF/docker/com.spotify/foobar/image-name" );
Ini bagus untuk pengujian integrasi di mana Anda menginginkan versi terbaru dari image Docker proyek lain.
Perhatikan bahwa Anda harus mendaftarkan ekstensi Maven di POM Anda (atau POM induk) agar tipe docker-info
dapat didukung:
< build >
< extensions >
< extension >
< groupId >com.spotify</ groupId >
< artifactId >dockerfile-maven-extension</ artifactId >
< version >${version}</ version >
</ extension >
</ extensions >
</ build >
Proyek Anda terlihat seperti ini:
a/
Dockerfile
pom.xml
b/
Dockerfile
pom.xml
Anda sekarang dapat menggunakan proyek ini dengan Fig atau docker-compose atau sistem lain yang bekerja dengan Dockerfiles. Misalnya, docker-compose.yml
mungkin terlihat seperti:
service-a :
build : a/
ports :
- ' 80 '
service-b :
build : b/
links :
- service-a
Sekarang, docker-compose build
docker-compose up
dan docker-compose akan berfungsi seperti yang diharapkan.
Lihat dokumen penggunaan.
Lihat dokumen autentikasi.
Untuk memotong rilis 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
Kami menggunakan gren
untuk membuat Rilis di Github:
gren release