DEV Community

Diego de Sousa Brandão
Diego de Sousa Brandão

Posted on

6 1 1 2 1

Guia Passo a Passo: Deploy de uma API REST Java no Docker

Introdução
O Docker é uma ferramenta poderosa que simplifica o processo de empacotar, distribuir e executar aplicativos em contêineres. Neste guia, vamos explorar como fazer o deploy de uma API REST Java em um contêiner Docker.

Pré-requisitos
• JDK instalado
• Maven instalado
• Docker instalado
• Conta no Docker Hub
• Intellij ou uma IDEA de sua preferência (no exemplo será utilizado Intellij).
Conhecimento básico do Docker e do Docker Compose.

Se gostou do artigo, lhe serviu deixe um like ou um comentário, é sempre bom saber, obrigado e até logo.

Passo 1: Criando o repositório Docker Hub

Acesse o site: https://hub.docker.com/
Caso não possua, crie uma conta o processo é bem simples, após criar a conta, siga os passos abaixo:

Image description

Image description

Quanto a regra de criação do nome do repositório: O nome do seu repositório deve conter uma combinação de caracteres alfanuméricos e pode conter os caracteres especiais ., _ ou -. As letras devem ser minúsculas.

Clique em Create e após isso, verá essa tela:

Image description

Dê atenção ao destaque em vermelho, ali terá o seu nome de usuário no meu caso: diegobr e o nome do repositório: dockerapirest
Grave essas duas informações, pois iremos utilizá-la a seguir.

Passo 2: Preparando o Projeto
Certifique-se de ter um projeto Java Spring Boot pronto para ser empacotado. Se você ainda não tem um, pode criar um rapidamente usando o Spring Initializer.
Recomendo usar essas dependências para melhor didática, será necessário para o teste mais a frente:

Image description

Você, pode iniciar um do zero: https://start.spring.io/
Ou você pode usar o exemplo do artigo, acessando aqui: https://github.com/diegoSbrandao/Deploy-Docker-Exemplo

Abra o pom.xml e vá até o final em plugins, conforme imagem abaixo, você irá adicionar esse trecho de código:

Image description

IMPORTANTE: Na linha 16 você deve alterar, para o nome do seu usuário e nome do seu repositório no Docker Hub.

           <plugin>
                <groupId>com.spotify</groupId>
                <artifactId>dockerfile-maven-plugin</artifactId>
                <version>1.4.13</version>
                <executions>
                    <execution>
                        <id>default</id>
                        <goals>
                            <goal>build</goal>
                            <goal>push</goal>
                        </goals>
                    </execution>
                </executions>
                <configuration>
                    <useMavenSettingsForAuth>true</useMavenSettingsForAuth>
                    <repository>diegobr/dockerapirest</repository>
                    <tag>${project.version}</tag>
                    <buildArgs>
                        <JAR_FILE>${project.build.finalName}.jar</JAR_FILE>
                    </buildArgs>
                </configuration>
            </plugin>
Enter fullscreen mode Exit fullscreen mode

Image description
A princípio ficará assim seu pom.

Explicação de cada linha da configuração do plugin:

Declaração do plugin

A tag declara o uso do plugin dockerfile-maven-plugin. Ela fornece as seguintes informações:
groupId: com.spotify - Identifica o fornecedor do plugin, Spotify.
artifactId: dockerfile-maven-plugin - Identifica o artefato do plugin, dockerfile-maven-plugin.
version: 1.4.13 - Especifica a versão do plugin, 1.4.13.

Execução do plugin
A tag define as fases e metas de execução do plugin. Neste caso, há uma única execução com o ID default. Ela executa duas metas:

build: Constrói a imagem Docker usando o Dockerfile especificado no projeto.
push: Envia a imagem Docker construída para o repositório especificado.

Configuração do plugin
A tag define os parâmetros de configuração do plugin. Ela inclui as seguintes configurações:
useMavenSettingsForAuth: true - Indica que as credenciais de autenticação devem ser recuperadas do arquivo Maven settings.xml.
repository: seu nome/nome repositorio - Especifica o repositório Docker Hub para onde a imagem será enviada.

tag: {project.version}\ - Define a tag da imagem Docker para a versão atual do projeto. 4. buildArgs: JAR_FILE={project.build.finalName}.jar- Define um argumento de build chamadoJAR_FILE que define o valor para o nome do arquivo JAR gerado pela compilação do projeto. Este argumento é usado no Dockerfile para especificar o arquivo JAR a ser incluído na imagem.

Passo 3: Dockerfile

Na raiz do projeto crie o arquivo Dockerfile, lembrando ele deve ter exatamente este nome e NENHUMA extensão.
Existe várias formas de cria-lo, eu deixo a abaixo uma delas:

Image description

Com o arquivo Dockerfile criado, vamos usar a configuração para subirmos nossa imagem:

Image description

FROM eclipse-temurin:17-jdk-alpine
RUN mkdir app
ARG JAR_FILE
ADD /target/${JAR_FILE} /app/spring-docker-spotify.jar
WORKDIR /app
ENTRYPOINT java -jar spring-docker-spotify.jar

Enter fullscreen mode Exit fullscreen mode

Explicação:
--FROM eclipse-temurin:17-jdk-alpine
Esta linha especifica a imagem base para o contêiner Docker. A imagem eclipse-temurin:17-jdk-alpine é um ambiente de execução Java leve baseado no OpenJDK 17 e no Alpine Linux.

-- RUN mkdir app
Esta linha cria um diretório chamado app dentro do contêiner. Este diretório será usado para armazenar os arquivos do aplicativo.

-- ARG JAR_FILE
Esta linha define um argumento chamado JAR_FILE. O valor deste argumento será especificado ao construir a imagem Docker.

-- ADD /target/${JAR_FILE} /app/spring-docker-spotify.jar
Esta linha copia o arquivo JAR do diretório target para o diretório app no contêiner. O argumento JAR_FILE é usado para especificar o nome do arquivo JAR.

-- WORKDIR /app
Esta linha define o diretório de trabalho para o contêiner como o diretório app. Isso significa que quando o contêiner for iniciado, quaisquer comandos executados serão executados a partir do diretório app.

-- ENTRYPOINT java -jar spring-docker-spotify.jar

Esta linha define o ponto de entrada para o contêiner. O entrypoint é o comando que será executado quando o contêiner for iniciado. Neste caso, o entrypoint é o comando java, que é usado para executar o arquivo JAR. A opção -jar especifica que o comando java deve executar um arquivo JAR. O argumento spring-docker-spotify.jar especifica o nome do arquivo JAR a ser executado.

Passo 4: Criando a imagem.
Importante tenha logado no Docker Desktop.

Antes de criarmos, considere alterar a versão da aplicação do pom, conforme exemplo abaixo:

Image description

Agora iremos empacotar e criar nossa imagem, no terminal da raiz do projeto onde estão pom.xml, use o comando: mvn package

Image description

Se tudo ocorrer conforme esperado, terá esse resultado no console:

Image description

Utilize o comando: docker images, deve aparecer conforme abaixo, sua imagem:

Image description

Agora, vamos subir a imagem para o Docker Hub no passo 5.

Passo 5: Subindo imagem no Docker Hub

Para subir sua imagem você irá utilizar os comandos abaixo:

docker tag nome-da-imagem:tag nome-do-usuario/nome-do-repositorio:tag

docker push nome-do-usuario/nome-do-repositorio:tag
Enter fullscreen mode Exit fullscreen mode

Exemplificando, no caso do exemplo o meu ficará assim:

docker tag diegobr/dockerapirest:1.0.0 diegobr/dockerapirest:tag
informação como pode ver retiradas daqui.

Image description

Após incluir o comando acima:

Image description

Nada será mostrado, isto é normal e esperado.

E agora damos o comando de push:
docker push diegobr/dockerapirest:1.0.0

Após o comando a imagem será montada e enviada.

Image description

Vá ao seu repositório e escolhe a opção Tag:

Image description

Você verá o número da tag que criou e o pull da sua imagem Docker.

Passo 6: Testando spring actuator.

Para testar, apaguei toda a imagem que tinha da api, conforme imagem abaixo:

Image description

E vou utilizar a imagem que subi para testar, para isso: simplesmente copiamos o Docker pull conforme destaque em vermelho, no caso estou utilizando o bash do git, mas pode ser qualquer terminal.

Image description

Imagem baixada e agora vamos testar:

Image description

Utilize o comando abaixo para rodar a imagem:

docker run -p 8080:8080 diegobr/dockerapirest:1.0.0
Enter fullscreen mode Exit fullscreen mode

Image description

Agora, abrimos um navegador ou use postman ou insomnia, caso prefira, e utilize esse endereço: http://localhost:8080/actuator/health
Conforme, pode ver na imagem a aplicação foi deploy no Docker com sucesso.

Se seguiu até aqui, meu muito obrigado, se gostou do artigo, lhe serviu deixe um like ou um comentário, é sempre bom saber, obrigado e até logo.

Image description

Postmark Image

Speedy emails, satisfied customers

Are delayed transactional emails costing you user satisfaction? Postmark delivers your emails almost instantly, keeping your customers happy and connected.

Sign up

Top comments (0)

Postmark Image

Speedy emails, satisfied customers

Are delayed transactional emails costing you user satisfaction? Postmark delivers your emails almost instantly, keeping your customers happy and connected.

Sign up

👋 Kindness is contagious

Please leave a ❤️ or a friendly comment on this post if you found it helpful!

Okay