Sunday, May 28, 2017
Using fabric8 docker-maven-plugin to automate docker builds
In building the required libraries for a docker container, using a maven project, the libraries have to be copied to a separate location and we have to manually run a docker build. This process is cumbersome since you have to repeat the same process over even if there is a slight modification.
fabric8 docker-maven-plugin is the perfect solution for this requirement. spotify also supports a docker plugin. However fabric8 provides much more functionalities. For example, with fabric8 it's possible to inject values to the docker file with ease.
fabric8 provides a great source of documentation (https://dmp.fabric8.io/). However for a beginner, it could be challenging. My requirement was to configure the plugin in
such a way that would enable even a user without docker on his/her machine to do a maven build.
The first step was to move the variable names to the POM so that configurations can be separated in order to improve maintainability.
Next under the <build><plugins> tag add the maven docker plugin.
Next, I needed to skip the execution of the plugin if the user does not want to build the docker image. Therefore I created a profile, that would set the variable ${docker.skip} to true on the provision of the variable skipDocker.
I added the following section to the pom.
Based on the above code snippet, if skipDocker has been given as a maven directive, it would set docker.skip to true, effectively skipping the execution of the plugin.
Therefore a user can skip building the docker image simply by,
Fabric8 has a lot of support for docker builds. I have a lot to explore. Hope you've found my findings useful. Don't forget to leave a comment. :-)
fabric8 docker-maven-plugin is the perfect solution for this requirement. spotify also supports a docker plugin. However fabric8 provides much more functionalities. For example, with fabric8 it's possible to inject values to the docker file with ease.
fabric8 provides a great source of documentation (https://dmp.fabric8.io/). However for a beginner, it could be challenging. My requirement was to configure the plugin in
such a way that would enable even a user without docker on his/her machine to do a maven build.
The first step was to move the variable names to the POM so that configurations can be separated in order to improve maintainability.
<fabric8io.docker.version>0.21.0</fabric8io.docker.version> <docker.registry>myregistry.malith.com:5000</docker.registry> <docker.image.tag>latest</docker.image.tag> <docker.repository>projectname:${docker.image.tag}</docker.repository> <docker.fileName>Dockerfile</docker.fileName> <docker.skip>false</docker.skip>
Next under the <build><plugins> tag add the maven docker plugin.
<plugin> <groupId>io.fabric8</groupId> <artifactId>docker-maven-plugin</artifactId> <version>${fabric8io.docker.version}</version> <configuration> <registry>${docker.registry}</registry> <useColor>true</useColor> <verbose>true</verbose> <skip>${docker.skip}</skip> <images> <image> <name>${docker.registry}/${docker.repository}</name> <build> <dockerFileDir>${project.build.directory}/projectname-${project.version}-docker/projectname</dockerFileDir> <filter>@</filter> <dockerFile>${docker.fileName}</dockerFile> <tags> <tag>${docker.image.tag}</tag> </tags> </build> </image> </images> </configuration> <executions> <execution> <id>start</id> <phase>pre-integration-test</phase> <goals> <!-- "build" should be used to create the images with the artifact --> <goal>build</goal> <goal>start</goal> </goals> </execution> <execution> <id>stop</id> <phase>post-integration-test</phase> <goals> <goal>stop</goal> </goals> </execution> </executions> </plugin>
Next, I needed to skip the execution of the plugin if the user does not want to build the docker image. Therefore I created a profile, that would set the variable ${docker.skip} to true on the provision of the variable skipDocker.
I added the following section to the pom.
<profiles> <profile> <id>docker</id> <properties> <docker.skip>true</docker.skip> </properties> <activation> <property> <name>skipDocker</name> <value>true</value> </property> </activation> </profile> </profiles>
Based on the above code snippet, if skipDocker has been given as a maven directive, it would set docker.skip to true, effectively skipping the execution of the plugin.
Therefore a user can skip building the docker image simply by,
maven clean install -DskipDocker
Fabric8 has a lot of support for docker builds. I have a lot to explore. Hope you've found my findings useful. Don't forget to leave a comment. :-)
Subscribe to:
Post Comments
(
Atom
)
R-bloggers
About Me
Blog Archive
Popular Posts
-
Introduction Changepoints are abrupt variations in the generative parameters of sequential data. Changepoint detection is the process o...
-
Introduction The project aimed at improving the postCP package and making it available on CRAN again. The snag that prevented the pac...
-
It all began when I started searching for a Google Summer of Code project last year (November, 2015) . While I was searching through the we...
-
Since I'm on vacation, I thought of planning my project using the free time. As the next step, I thought of developing the front end of...
-
In building the required libraries for a docker container, using a maven project, the libraries have to be copied to a separate location an...
-
It was quite a daunting task at the beginning to start with Kubernetes 1.7 alpha release because I knew that I was bound to face with diffi...
-
Recently for a project, I used a Raspberry Pi. Although mostly it's preferred to use raspbian as an operating system, I chose to use U...
-
Last week we were assigned projects for our 4th semester and I was selected for the energy sector. As a part of it, when I was exploring t...
Powered by Blogger.
Labels
#GSOC
(3)
#Tech
(3)
#postCP
(3)
#Kubernetes
(2)
#R-gsoc
(2)
#docker
(2)
#CentOS
(1)
#Cluster
(1)
#Pi
(1)
#R
(1)
#Ubuntu
(1)
#docker-maven-plugin
(1)
#fabric8
(1)
#raspberryPi
(1)
Air Conditioning
(1)
Embedded
(1)
Micro Controllers
(1)
Power consumption
(1)
Smart Systems
(1)
Tech
(1)
© Malith's Perspective 2016 . Powered by Bootstrap , Blogger templates and RWD Testing Tool
No comments :
Post a Comment