Criando e enviando imagem Docker com Java e Maven

Fernando Evangelista
Nov 2 · 6 min read

Neste tutorial vamos aprender a criar e publicar uma imagem docker de forma simples e fácil apenas usando comandos do maven em um projeto spring boot.

Requisitos

Para criar uma imagem docker a partir do maven, vamos precisar de algumas tecnologias.

O plugin Dockerfile Maven

Apache Maven, ou Maven, é uma ferramenta de automação de compilação, gerenciamento, construção e implantação de projetos. Com a chegada do docker, também surgiu a necessidade do processo de criação e envio de imagens ser mais simples e rápido, foi pensando nisso que o pessoal do spotify criou um plugin chamado dockerfile-maven, facilitando a criação e envio de imagens docker. Com o dockerfile-maven é possível incluir no ciclo de construção do maven a criação e o envio da imagem para um repositório.
Antes de criar o dockerfile-maven, o spotify também criou um plugin de geração e enviou de imagens docker com o maven chamado docker-maven-plugin que hoje encontra-se inativo, porém ainda existem muitas coisas na internet sobre ele, e acaba gerando muita confusão para quem pesquisa, porém quem entrar no github do docker-maven-plugin vai notar que está inativo, também notará uma recomendação para usar o dockerfile-maven no lugar.

readme do docker-maven-plugin

Criando projeto java maven

Para seguimos com o tutorial, vamos precisar de um projeto java maven, para isso vamos criar nosso projeto baseado no Spring Boot a partir do template do spring Initializr
Na tela do spring initializr, vamos selecionar a opção Maven Project, a linguagem será Java e a versão do Spring Boot como 2.2.0, normalmente essas opções vem como default, com exceção da versão do Spring Boot que sempre será a ultima estável, também vamos adicionar a dependência do Spring Web.
Feito isso, vamos clicar em Generate para gerar e baixar o projeto.

Criando um serviço REST

Para prosseguir com os testes precisamos criar um serviço REST apenas para validação do nosso container assim que a imagem for gerada.
Vamos criar uma controller contendo apenas um método Http Get retornando uma simples String com o conteúdo: "Hello world". Então vamos criar uma classe, com o nome de HelloController e adicionar o seguinte conteúdo:

Controller hello

Criando o arquivo dockerfile

Antes de começarmos a criar nossa imagem docker precisamos do arquivo Dockerfile, já que o plugin dockerfile-maven necessita dele.
Com o passar do tempo e com a experiência no plugin docker-maven-plugin o próprio Spotify percebeu que a forma mais simples e fácil de criar imagens docker a partir de um projeto Java é fazer o desenvolvedor criar o arquivo Dockerfile.
Já que o plugin dockerfile-maven precisa de um arquivo Dockerfile, então vamos criá-lo.
Para isso crie na raiz do projeto um arquivo com o nome de Dockerfile e adicione o seguinte conteúdo:

Arquivo Dockerfile

A estrutura do nosso projeto com o arquivo Dockerfile ficará como na imagem abaixo:

Estrutura de pastas do nosso projeto maven

Configurando o pom.xml do projeto

Para configurar o plugin dockerfile-maven precisamos editar o arquivo pom.xmldo nosso projeto.

Vamos adicionar dentro da tag plugins as seguintes configurações, que encontra-se selecionada na imagem abaixo:

Arquivo pom.xml

Entendendo a nova configuração no pom.xml

A configuração em si é muito simples, além de incluir a dependência do dockerfile-maven também adicionamos algumas tags, como a execution que incluindo uma etapa no ciclo de construção do maven para o build e push da imagem.
Dentro da tag configuration, adicionamos a tag useMavenSettingsForAuth como o nome já diz, estamos ativando a autenticação via setting do maven. Não é necessária para criar uma imagem docker, apenas quando for enviar a imagem para um repositório.
Na tag repository, informei meu docker ID e o nome que queremos para a imagem. Se você possui um um docker ID, informe no lugar de fexx182, isso servirá para enviarmos para o docker hub.
Na tag com o nome de tag por fim, temos a tag JAR_FILEque nada mais é do que o nosso pacote .jar.
O arquivo pom.xml completo ficará:

Arquivo completo pom.xml

Criando a imagem docker com o dockerfile maven

Após criar o arquivo Dockerfile e adicionar as configurações necessárias no arquivo pom.xml, agora é hora de criamos a imagem docker usando comandos do maven. Para criamos a imagem é muito simples, precisamos apenas está no diretoria raiz do projeto e executar o seguinte comando maven:

mvn package

O comando mvn package cria um novo arquivo .jar dentro da pasta target que será usado para a nossa imagem docker.
Após executar o comando, já podemos consultar em nossas imagens docker local se a imagem do nosso projeto foi criada.
Execute o seguinte comando para listar as imagens docker disponíveis em seu sistema.

docker images

Após isso podemos notar que a imagem com o nome do nosso projeto foi criada e a tag da imagem foi criada com base na versão da aplicação.

imagem docker criada com o dockerfile-maven

Testando o projeto com a imagem docker gerada

Para testarmos a imagem gerada, vamos acessar nossa aplicação através do serviço HelloController que criamos, vamos criar o container, para isso, execute o seguinte comando:

Criando o container docker
docker run -p 8080:8080 {seu_docker_id}/spring-docker-spotify:0.0.1-SNAPSHOT

Após a aplicação subir, podemos acessar o endereço: http://localhost:8080/hello perceba que a mensagem "Hello world" aparecerá.

Enviando a imagem para o docker hub

Após usarmos o dockerfile-maven para criar a imagem docker, percebemos o quanto pode ser útil no dia a dia, e para ganhamos mais produtividade com o dockerfile-maven, podemos usá-los para enviar a imagem para um serviço de registro de imagens em nuvem, como o docker hub.

Para que isso seja possível, temos que configurar algumas coisas, porém é tão simples que uma das configurações nos já fizemos, que foi no pom.xml, a outra configuração fica no arquivo settings.xml do maven.

Configurando o settings.xml

Uma das etapas que temos que fazer para o dockerfile-maven consegui enviar nossa imagem para um repositório, é informar nossas credenciais no arquivosettings.xml do maven.

No arquivosettings.xml do maven e dentro da tag servers vamos adicionar o seguinte conteúdo:

Configuração no arquivo settings.xml

Entendendo a nova configuração no arquivo settings.xml

id: registry do docker hub
username: docker hub ID
password: senha do docker hub
email: seu email

Após configuramos o arquivo settings.xml, é hora de enviar a imagem para o docker hub, para isso execute o comando abaixo:

mvn dockerfile:push

Agora podemos visualizar nossa imagem no docker hub. 😀

Imagem docker no repositorio do docker hub

Conclusão

Nesse artigo passo a passo, aprendemos a usar o plugin do Spotify chamado dockerfile-maven em um projeto java maven, para que no ciclo de construção do maven fosse capaz de gerar uma imagem docker baseada em um arquivo dockerfile, logo após aprendemos a enviar a imagem para um serviço de registro de imagens em nuvem o docker hub.
Código fonte do tutorial, você pode acessar o meu github.

Welcome to a place where words matter. On Medium, smart voices and original ideas take center stage - with no ads in sight. Watch
Follow all the topics you care about, and we’ll deliver the best stories for you to your homepage and inbox. Explore
Get unlimited access to the best stories on Medium — and support writers while you’re at it. Just $5/month. Upgrade