Construindo uma imagem com uma única camada
Os containers Docker são compostos por camadas. Cada instrução no Dockerfile cria uma nova camada. Quanto mais camadas, maior o tamanho da imagem e mais lenta a inicialização do container.
Criando uma imagem com uma única camada, podemos reduzir o tamanho da imagem, acelerar a inicialização do container e melhorar a segurança.
Utilizando o APKO e o Melange
As imagens de contêiner são tipicamente montadas em múltiplas etapas. Uma ferramenta como o Docker, por exemplo, combina etapas de construção. Por outro lado, o apko é exclusivamente uma ferramenta que se concentra em produzir imagens base leves, que são totalmente reproduzíveis e contêm arquivos SBOM (Software Bill of Materials) gerados automaticamente para cada construção bem-sucedida.
Em vez de construir sua aplicação junto com seus componentes e dependências do sistema, você pode construir sua aplicação uma vez e cria-lo em diferentes arquiteturas e distribuições, usando uma ferramenta como o melange em combinação com o apko.
Instalando o APKO
Instalando o Melange
O nosso projeto
Nesse diretório está o código fonte da nossa aplicação e os arquivos de configuração do apko e do melange para diferentes ambientes.
O arquivo melange.yaml
O campo
package
define as especificações do pacote, incluindo nome, versão, descrição, licença e dependências de runtime.O campo
environment
define o ambiente de construção, incluindo repositórios de pacotes e pacotes a serem instalados.O campo
pipeline
define as etapas de construção do pacote. Neste caso, a etapaBuild Python application
cria um ambiente virtual Python, instala as dependências do Python e copia o código fonte da aplicação para o diretório de destino.
Depois de entender um pouco da estrutura do arquivo melange.yaml, vamos construir a imagem:
O output do comando melange build
contém o diretório packages
com um diretório para cada arquitetura que você definiu, nele temos o arquivo senhas-1.0.0-r0.apk
que é o pacote da nossa aplicação e APKINDEX.json
que é o índice de pacotes.
Agora que possuímos o pacote da nossa aplicação, vamos construir a imagem Docker com o apko:
O output do comando apko build
contém o arquivo giropops-senhas.tar
que é um arquivo tarball contendo a imagem Docker.
Para carregar a imagem Docker no Docker Engine, execute o comando:
Assim que a imagem é carregada no Docker Engine, também fica disponível para ser utilizada em qualquer ambiente que tenha o Docker Engine instalado.
Agora é possível publicar a imagem em um registry Docker, como o Docker Hub, utiliza-la localmente, no Kubernetes e em qualquer outro ambiente que suporte imagens Docker.
Na pipeline disponível no repositório em .github/workflows/chainguard.yaml
temos todas as etapas acima, além de assinatura com Cosign, verificação de segurança e publicação no registry.
As imagens também foram construídas para diferentes utilizando o GitHub Packages, para acessar as imagens, basta acessar o link.
Last updated