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:
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:
A saída do comando será semelhante a essa:
Para verificar se tudo deu certo, podemos usar o docker para fazer o pull da imagem:
E na sequencia usar o comando docker images para ver detalhes da imagem baixada:
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.
[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] ------------------------------------------------------------------------
docker pull registry-local:5005/loja-virtual
docker images registry-local:5005/loja-virtual
REPOSITORY TAG IMAGE ID CREATED SIZE
registry-local:5005/loja-virtual latest ff2161e222db 5 minutes ago 897MB