Construindo imagem Docker em projetos Java

Por Gaspar Barancelli Junior em 22 de fevereiro de 2023

Docker se tornou o padrão no setor de containers e conta com suporte dos maiores fornecedores do ecossistema Linux. Com toda certeza o Docker se tornou padrão para implantação de serviços ou aplicativos baseado em servidor.

Mas como podemos gerar uma imagem Docker da nossa aplicação e qual a melhor forma de fazer isso?

Nesse artigo trago 2 exemplos de plugins que utilizo em meus projetos para criar imagens Docker.

Primeiramente vamos falar do Jib. Ele é um construtor de imagens para containers, desenvolvido em Java, tem plugins tanto para o Maven como para o Gradle, não é necessário ter nenhum arquivo de configuração como o Dockerfile, e o mais legal de tudo é que ele separa o aplicativo em varias camadas, caso tenha apenas alteração no código fonte da aplicação, apenas a camada do código é reconstruída, caso tenha alguma nova dependência adicionada a aplicação apenas essa camada é reconstruida.

Segue exemplo da configuração do plugin do Jib utilizando Maven, onde podemos definir o nome da imagem, definir as flags para a JVM e qual a classe Main.

<plugin>
    <groupId>com.google.cloud.tools</groupId>
    <artifactId>jib-maven-plugin</artifactId>
    <version>2.6.0</version>
    <configuration>
        <from>
            <image>openjdk:15-jdk-slim-buster</image>
        </from>
        <to>
            <image>gasparbarancelli/blog:${build.number}</image>
        </to>
        <container>
            <jvmFlags>
                <jvmFlag>-Xms512m</jvmFlag>
                <jvmFlag>-Xmx2048m</jvmFlag>
            </jvmFlags>
            <mainClass>com.gasparbarancelli.BlogApplication</mainClass>
        </container>
    </configuration>
</plugin>

Com o plugin configurado agora podemos executar a seguinte tarefa (Goal) no Maven.

# Para construir a imagem sem o Docker Daemon.
mvn compile jib:build
# Para construir a imagem utilizando o Docker daemon.
mvn compile jib:dockerBuild

Para verificarmos que a imagem foi construída com sucesso, podemos digitar o seguinte comando.

docker images | grep blog

Para o segundo exemplo vamos utilizar um plugin desenvolvido pelo Spotify.

Devemos criar em nosso projeto o arquivo Dockerfile, esse arquivo deve conter as configurações necessárias para construir nossa imagem, por melhor pratica devemos adicionar esse arquivo dentro do projeto, no meu caso adicionei o arquivo no seguinte diretorio src/main/docker. Repare que nesse arquivo configuramos a imagem base, adicionamos o artefato gerado pelo maven dentro da imagem e também definimos o comando que deve ser executado ao iniciar o container docker.

FROM openjdk:15-jdk-slim-buster
ADD blog.jar app.jar
RUN sh -c 'touch /app.jar'
ENTRYPOINT [ "sh", "-c", "java -Xms512m -Xmx2048m -jar /app.jar"]

Depois de configurarmos o Dockerfile podemos adicionar o plugin do maven.

<plugin>
    <groupId>com.spotify</groupId>
    <artifactId>docker-maven-plugin</artifactId>
    <version>1.2.2</version>
    <configuration>
        <imageName>gasparbarancelli/blog</imageName>
        <imageTags>${build.number}</imageTags>
        <dockerDirectory>src/main/docker</dockerDirectory>
        <resources>
            <resource>
                <targetPath>/</targetPath>
                <directory>${project.build.directory}</directory>
                <include>${project.build.finalName}.jar</include>
            </resource>
        </resources>
    </configuration>
</plugin>

Com o plugin configurado agora podemos executar a seguinte tarefa (Goal) no Maven.

mvn compile docker:build

Assim como no exemplo anterior, para verificarmos que a imagem foi construída com sucesso, podemos digitar o seguinte comando.

docker images | grep blog

// Livros recomendados relacionados ao assunto do post

// Compartilhe esse Post