Boas práticas para criar contêineres inicializáveis
(developers.redhat.com)- O modo de imagem do Red Hat Enterprise Linux (RHEL) simplifica o processo de construir, implantar e gerenciar o RHEL como contêineres inicializáveis
- Desenvolvedores, equipes de operações e fornecedores de soluções podem gerenciar aplicações e o sistema operacional base usando as mesmas ferramentas e tecnologias nativas de contêiner
Construção de contêineres inicializáveis vs. contêineres de aplicação
- Assim como contêineres de aplicação comuns, contêineres inicializáveis podem ser construídos com tecnologias de contêiner existentes, como Podman, Docker ou buildkit
- As imagens podem ser armazenadas em registros de contêiner como Quay.io, Docker Hub, GitHub Container Registry ou um registro interno de contêineres
- Contêineres inicializáveis são uma evolução natural da tecnologia de contêineres, oferecendo um fluxo de trabalho e uma experiência de usuário abrangentes e nativos de contêiner, incluindo o sistema operacional completo e o kernel Linux
Uso de Containerfile
- O Containerfile (também chamado de Dockerfile) contém todas as informações necessárias para construir uma imagem de contêiner, incluindo a imagem base, instruções para instalar pacotes de software e copiar arquivos de um repositório Git
- O fluxo de trabalho e as ferramentas para construir contêineres inicializáveis são essencialmente os mesmos dos contêineres de aplicação
- No entanto, há algumas boas práticas que se aplicam ao construir contêineres inicializáveis
Boas práticas para linting
- Recomenda-se executar o comando
bootc container lintcomo etapa final do Containerfile - Esse comando realiza várias verificações dentro da imagem de contêiner e gera erros se houver problemas
- Por exemplo, ele verifica se há vários kernels em
/usr/lib/modules, inspeciona a sintaxe dos arquivos em/usr/lib/bootc/kargs.de checa a higiene de/etce/usr/etc
GitHub Actions e espaço em disco
- Ao construir contêineres com GitHub Actions, você pode enfrentar problemas relacionados a espaço em disco por causa do tamanho das imagens de contêiner inicializáveis
- Para resolver isso, é possível adicionar ao arquivo de workflow uma etapa que exclui o diretório
/opt/hostedtoolcachepara liberar espaço em disco
Entendendo o /var
/varé um diretório para dados e estado locais da máquina, persistentes e mutáveis, e mesmo durante atualizações o conteúdo de/varna imagem de contêiner não é alterado- Portanto, se uma aplicação gravar dados em
/var, é preciso movê-los para outro diretório, como/usr/share, para evitar problemas com montagem somente leitura
Uso do comando useradd
- Se
useraddfor chamado em scripts de empacotamento, pode ocorrer state drift quando/etc/passwdé modificado localmente - Para evitar esse problema, é possível considerar o uso da opção
DynamicUser=yesdosystemdpara criar usuários dinamicamente - Porém, em casos complexos, pode ser difícil migrar para
DynamicUser=yes; nesse caso, é recomendável usarsystemd-sysuserspara criar usuários
Incorporação de contêineres com Quadlet
- Executar workloads conteinerizados no
systemdé uma forma simples e poderosa de obter implantações confiáveis - O Podman oferece uma ferramenta chamada Quadlet para integração com
systemd, permitindo gerenciar workloads conteinerizados de forma declarativa - O Quadlet se integra perfeitamente ao modo de imagem e pode usar imagens vinculadas logicamente para pré-baixar imagens de contêineres de aplicação na inicialização
Resumo
- Com o modo de imagem, ocorre uma mudança de paradigma na forma de operar hosts RHEL
- É possível construir, implantar e gerenciar o sistema operacional com ferramentas cloud-native, lidando com um SO imutável em que a maior parte do sistema é montada como somente leitura
Ainda não há comentários.