Ovaj je članak namijenjen ljudima koji koriste Maven kao alat za izgradnju i upravljanje ovisnostima za JAVA aplikacije. Pokazat će vam kako integrirati tijekove izrade spremnika, označavati i gurati tijekove rada u njihov postojeći Maven ekosustav za upravljanje gradnjom.
Imati mogućnost izrade, označavanja i guranja vaše aplikacije kao spremnika odmah nakon naredbi Mavenovog životnog ciklusa prilično je zgodna stvar. To jednostavno čini stvari jednostavnim i brzim ako pokušavate unijeti snagu spremnika za razmještanje vaših aplikacija i potpuno spremne koristeći Maven za upravljanje ovisnostima.
Ako pogledamo postojeća rješenja za integriranje postavljanja docker spremnika u Maven, postoji nekoliko takvih, poput spotify maven docker dodatak, fabric8io docker maven dodatak itd. Ali sva ta rješenja donose neželjenu složenost, dodatnu krivulju učenja i previše promijenite u postojeći kod aplikacije. Ipak postoji jednostavniji i lakši način da se to postigne bez upotrebe bilo kojeg dodatka treće strane.
Ako primijetite Mavenov dodatak Ant, omogućuje nam pokretanje vanjskih naredbi. Dakle, korištenjem dodatka Ant, imamo mogućnost pokretanja gradnje dockera, označavanja, guranja ili bilo koje naredbe po želji. Jedino što moramo učiniti je osigurati odgovarajuću Dockerfile za izgradnju Docker slike za vašu aplikaciju i potreban skup naredbi i Maven konfiguracija u datoteku pom.xml.
Za objašnjavanje koraka koji su uključeni u ovaj postupak, poslužit ću se primjerom JAVA aplikacije. Sadrži sve uzorke koda korištene u sljedećim koracima. Možete ga klonirati odavde.Korak 1 | Stvorite Dockerfile
Dockerfile treba biti pohranjen na putu src / main / docker / Dockerfile vaše JAVA aplikacije.# Pull base imageFROM tomcat:8.0.30-jre7# MaintainerMAINTAINER "[email protected]"
# Set Environment propertiesENV JAVA_OPTS=-Denvironment=production# Copy war file to tomcat webapps folderCOPY /dockermavensample.war /usr/local/tomcat/webapps/
Korak 2 | Ažurirajte pom.xml da biste kopirali sve resurse povezane s Dockerom u ciljni direktorij
Za kopiranje resursa možemo koristiti dodatak maven-resource-plugin. maven-resources-plugin copy-resources validate copy-resources ${basedir}/target; src/main/docker true
Korak 3 | Ažurirajte pom.xml kako biste omogućili izgradnju i označavanje Dockerove slike putem Mavenova dodatka Ant
org.apache.maven.plugins
1.6
prepare-package
package
false
;
run
Mavenov dodatak Ant izvršit će naredbu docker u fazi paketa Mavenovog životnog ciklusa sljedećim redoslijedom, čime će se izraditi slika dockera iz datoteke Docker koja je kopirana u ciljnu mapu u koraku 2.
docker build -t dockermavensample:1.0.0 target
Korak 4 | Ažurirajte datoteku pom.xml kako biste omogućili guranje slike Dockera u udaljeno spremište Dockera
Idealno za proizvodnju, morali biste svoje Docker slike gurnuti u vlastiti privatni Docker registar ili koristiti spremište slika Dockera treće strane koje omogućuje pohranu privatnih Dockerovih slika tako da drugi ne mogu izravno povući vaše Dockerove slike. org.apache.maven.plugins; maven-antrun-plugin 1.6 ; install false
run
Uz gornje korake, možda ćete htjeti imati kontrolu nad tim kako izvršavate ove naredbe povezane s dockerom u vašem Maven životnom ciklusu. Za to možete koristiti Maven profile da biste logički podijelili gore definicije dodataka. Zatim ih izvršite samo kada se pozove profil povezan s tom radnjom.
Pogledajte sljedeće uzorke profila:
dockerBuild maven-resources-plugin
copy-resources validate;
copy-resources
${basedir}/target
src/main/dockertrue ;
org.apache.maven.plugins maven-antrun-plugin 1.6
prepare-package
package false
run
true;
dockerRelease
org.apache.maven.plugins
maven-antrun-plugin 1.6
install
false
run
Nakon što dovršite gornje korake, samo pokrenite
mvn clean install -P dockerBuild,dockerRelease
Now your JAVA application is packaged as a container and pushed into a remote docker repository as well. You can test whether the image you created is working by running following commands,




As you can see we can use already available Maven features and plugins to create a well-structured build pipeline for deploying our applications as containers.
Sample Project:
rav94/dockermavensample
Demo Project for showcasing Automating Container Deployment via Maven - rav94/dockermavensamplegithub.com
Thanks for reading!