Considerações adicionais - AWS Orientação prescritiva

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

Considerações adicionais

Esta seção aborda considerações gerais sobre a conteinerização Java que não são específicas das aplicações Java EE.

Use uma imagem base pequena

Recomendamos criar uma imagem base pequena (menos de 500 MB) e bem mantida. Diminuir o tamanho da imagem base reduz os custos operacionais e de rede. Uma imagem base menor também pode melhorar a segurança ao reduzir o número de componentes que podem ser explorados. É possível usar uma das imagens distroless baseadas no Debian. As imagens têm o número mínimo de ferramentas instaladas e não contêm gerenciadores de pacotes ou shells. Essas imagens distroless também reduzem a superfície geral de ataque. As imagens distroless podem ter menos de 150 MB. Para obter mais informações, consulte o repositório de imagens GitHub de contêiner “Distroless”.

É prática recomendada seguir o princípio de descartabilidade e desenvolver um tempo de inicialização rápido para suas imagens de contêiner. Usando técnicas como ahead-of-time-compilation(documentação do OpenJDK) ou compartilhamento de dados de classes de aplicativos (documentação do OpenJDK), você pode melhorar o tempo geral de inicialização compilando classes Java em código nativo antes de iniciar a máquina virtual e permitindo que um conjunto de classes seja pré-processado em um arquivo compartilhado. Também é possível usar o GraalVM para criar imagens do Docker mínimas para aplicações em Java Para obter mais informações, consulte a postagem do blog Usando o GraalVM para criar imagens mínimas do Docker para aplicativos Java. AWS

Atualize para uma versão do JDK compatível com contêineres

Antes do JDK 8u131, a JVM não reconhecia os limites de memória ou CPU definidos pelo mecanismo do Docker usando sinalizadores. Isso significa que, sempre que você executa sua aplicação em um contêiner, a JVM “vê” o número total de processadores disponíveis no sistema ou, no caso de máquinas virtuais, no sistema virtual. O mesmo vale para os limites de memória padrão: a JVM examinará a memória geral do host e a usará para definir seus padrões. Consequentemente, a JVM pode reivindicar mais memória do que a plataforma de contêiner permite, o que resulta na finalização do processo Java pela plataforma de contêiner (Docker). Uma solução para esse problema é migrar a aplicação Java para Java 9 ou 8u131+ antes de conteinerizá-la. O Java 10 e versões posteriores oferecem reconhecimento e suporte total a contêineres.