7.5 Configurando o Jib
O Jib (https://github.com/GoogleContainerTools/jib) é uma ferramenta utilizada para gerar imagem de aplicações Java sem a necessidade de utilizar um daemon do Docker. Ele pode ser adicionado ao projeto por meio de um plugin para o Maven (https://github.com/GoogleContainerTools/jib/tree/master/jib-maven-plugin), e separa a aplicação em múltiplas camadas, permitindo um processo de construção da aplicação granular e incremental.
Isso é possível, pois a imagem da aplicação é dividida em camadas de dependências, recursos e classes. Sendo assim, somente as camadas que forem alteradas são reconstruídas, não sendo necessário gerar novamente a imagem completa, o que permite um processo mais rápido, e com capacidade de reprodutibilidade, ou seja, imagens geradas a partir do mesmo código, tem a garantia de serem iguais. Essa capacidade é utilizada para evitar que a imagem seja reconstruída desnecessariamente.
Para configurarmos sua utilização no projeto, vamos alterar o arquivo pom.xml presente na raíz do projeto, adicionando nas propriedades (properties) a versão do Jib que vamos utilizar, no caso a versão 3.1.4:
<properties>
<blc.version>2.2.0-GA</blc.version>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<gwt.version>2.4.0</gwt.version>
<jib.maven-plugin-version>3.1.4</jib.maven-plugin-version>
</properties>
Na seção de plugins do mesmo arquivo, vamos adicionar o plugin do Jib:
<plugin>
<groupId>com.google.cloud.tools</groupId>
<artifactId>jib-maven-plugin</artifactId>
<version>${jib.maven-plugin-version}</version>
<configuration>
<from>
<image>registry-local:5005/loja-virtual-base</image>
</from>
<to>
<image>registry-local:5005/loja-virtual</image>
</to>
<allowInsecureRegistries>true</allowInsecureRegistries>
<container>
<entrypoint>catalina.sh</entrypoint>
<args>run</args>
<!-- <mainClass>com.myservice.MyServiceApplication</mainClass> -->
<jvmFlags>
<jvmFlag>-Djava.security.egd=file:/dev/./urandom</jvmFlag>
</jvmFlags>
<appRoot>/usr/local/tomcat/webapps/devopsnapratica</appRoot>
<creationTime>USE_CURRENT_TIMESTAMP</creationTime>
</container>
</configuration>
</plugin>
Observe que estamos usando a propriedade `jib.maven-plugin-version` definida no passo anterior para definir a versão do plugin.
Com a tag image, dentro da tag from, definimos qual será a imagem base que vamos utilizar para gerar nossa imagem. Já com a image dentro da tag to definimos qual o nome da imagem que será criada pelo Jib.
Como vamos utilizar um registry local do Docker para publicar a imagem, vamos definir como true a propriedade allowInsecureRegistries.
Já na propriedade entrypoint, dentro de container, especificaremos qual o script que será executado quando o container for inicializado, no caso, o arquivo catalina.sh, o qual receberá como argumento o parâmetro run, definido com a propriedade args.
Podemos definir flags que serão passadas para a JVM dentro da propriedade jvmFlags. Por último, vamos definir a localização da aplicação no container, com a propriedade appRoot e a data da criação da imagem, com a propriedade creationTime. Estamos usando a constante USE_CURRENT_TIMESTAMP que é a hora atual.
Para construir a imagem é necessário executar o seguinte comando:
mvn compile com.google.cloud.tools:jib-maven-plugin:3.2.1:build
A saída do comando será semelhante a essa:
[INFO] Executing tasks:
[INFO]
[INFO]
[INFO]
[INFO] Container entrypoint set to [catalina.sh]
[INFO] Container program arguments set to [run]
[INFO]
[INFO] Built and pushed image as registry-local:5005/loja-virtual
[INFO] Executing tasks:
[INFO] [============================ ] 91,7% complete
[INFO] > launching layer pushers
[INFO]
[INFO] ------------------------------------------------------------------------
[INFO] Reactor Summary for loja-virtual-devops 1.0:
[INFO]
[INFO] loja-virtual-devops ................................ SUCCESS [ 18.239 s]
[INFO] core ............................................... SUCCESS [ 15.845 s]
[INFO] admin .............................................. SUCCESS [ 30.405 s]
[INFO] site ............................................... SUCCESS [ 7.916 s]
[INFO] combined ........................................... SUCCESS [ 12.807 s]
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 01:28 min
[INFO] Finished at: 2022-04-28T12:52:02-03:00
[INFO] ------------------------------------------------------------------------
Para verificar se tudo deu certo, podemos usar o docker para fazer o pull da imagem:
docker pull registry-local:5005/loja-virtual
E na sequencia usar o comando docker images para ver detalhes da imagem baixada:
docker images registry-local:5005/loja-virtual
REPOSITORY TAG IMAGE ID CREATED SIZE
registry-local:5005/loja-virtual latest ff2161e222db 5 minutes ago 897MB
Como geramos nossa imagem, e publicamos no registry do Docker que configuramos anteriormente, podemos definir um Chart para nosso projeto, de modo que seja possível realizar a implantação da aplicação no cluster Kubernetes. Veremos como realizar esse passo na próxima seção.
Last updated
Was this helpful?