No post anterior, Como rodar uma aplicação Java com o Docker, falei um pouco sobre o uso de containers para subir uma aplicação desenvolvida com o framework Spring Boot. Agora que sabemos como criar uma imagem por meio da linha de comando, veremos como fazer isso pelo processo de build do Maven. Para isso, vamos usar o plugin docker-maven-plugin desenvolvido pela galera do Spotify.
Alteração no pom
A única alteração no nosso sistema será no pom.xml:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
<plugin>
<groupId>com.spotify</groupId>
<artifactId>docker-maven-plugin</artifactId>
<version>0.4.13</version>
<configuration>
<imageName>mytask</imageName>
<baseImage>frolvlad/alpine-oraclejdk8:slim</baseImage>
<entryPoint>["sh", "-c", "java -Djava.security.egd=file:/dev/./urandom -jar /${project.build.finalName}.jar --spring.profiles.active=${spring.profile}"]
</entryPoint>
<resources>
<resource>
<targetPath>/</targetPath>
<directory>${project.build.directory}</directory>
<include>${project.build.finalName}.jar</include>
</resource>
</resources>
<imageTags>
<imageTag>${project.version}</imageTag>
<imageTag>latest</imageTag>
</imageTags>
</configuration>
</plugin>
As configurações necessárias para o uso do plugin são:
- imageName – O nome da imagem após o build;
- baseImage – O nome da imagem base;
- entryPoint – Comando que será executado ao inicializar o container;
- resources – Usado para copiar artefatos para dentro do container;
- imageTags – As tags da imagem gerada.
Execução do build com o Maven
Com essa pequena modificação, estamos aptos a criar a imagem direto do build com o Maven. Vamos executar o seguinte comando:
$ mvn clean package docker:build --batch-mode release:update-versions
Com esse comando, estamos solicitando ao plugin a execução do processo de build da imagem com os parâmetros que definimos.
Adicionei ao comando o -batch-mode release:update-versions para que o Maven incremente a versão do pom sem interação com o usuário. Fiz isso para que você possa ver as imagens geradas com a mesma versão do pom (linha 18). Então, todas as vezes que o comando for executado, podemos verificar que uma nova imagem está sendo criada com a mesma versão do projeto.
Uma das facilidades que o plugin nos oferece é a abstração em relação aos comandos necessários para criar a imagem. Há muito mais informações do plugin no github do projeto, vale a pena dar uma espiada. O código fonte do exemplo está no meu github.
Agora que você tem mais uma opção para criar a imagem do Docker, seja por intermédio da linha de comando ou pelo Maven, qual você escolheria e por que?
Por hoje é só galera, abraços e até a próxima!