O que é o Docker BuildKit e por que é importante?

O Docker BuildKit é um mecanismo de compilação opcional que oferece melhorias substanciais em relação ao processo de compilação tradicional. O BuildKit cria camadas de imagem em paralelo, acelerando o processo geral de construção.

índice

  1. O que é o BuildKit?
  2. Como o BuildKit funciona?
  3. Ativando o suporte ao BuildKit
  4. "docker buildx"
  5. funções de construção
  6. Conclusão

O que é o BuildKit?

O BuildKit foi desenvolvido como parte do projeto Moby, um esforço do Docker para "montar sistemas de contêineres especializados sem reinventar a roda". Foi anunciado em 2017 e começou a ser enviado com o Docker Engine na versão 18.09.

O BuildKit se concentra em melhorar o desempenho de compilação, o gerenciamento de armazenamento e a extensibilidade. Suas principais reivindicações são processamento paralelo, cache mais avançado, arquitetura conectável e coleta automática de lixo. Estes são combinados em um sistema de construção mais eficiente e extensível do que o motor original.

Níveis que não afetam uns aos outros podem ser construídos ao mesmo tempo, reduzindo o tempo de espera para completar as etapas. O BuildKit também otimiza o acesso a arquivos locais referenciados por instruções COPY . Mantém o controle das alterações feitas e copia apenas os arquivos que foram alterados desde a última compilação, em vez de transferir todo o contexto de compilação.

O BuildKit também simplifica as compilações entre plataformas. Você pode fornecer o --platform para especificar os destinos para os quais compilar. O BuildKit montará automaticamente um manifesto de imagem apropriado para cobrir todas as arquiteturas especificadas.

 docker buildx --create --platform linux/amd64,linux/arm64 .

Como o BuildKit funciona?

As melhorias de desempenho do BuildKit são facilitadas pelo uso de um formato de definição de compilação de baixo nível, chamado LLB. É um formato binário baseado em gráficos que combina definições de construção complexas.

Como as camadas estão diretamente vinculadas, o BuildKit facilita a comparação mais rápida dos gráficos de construção e do conteúdo que eles incluem. O construtor padrão do Dockerfile precisa contar com heurísticas imprecisas para determinar se duas imagens são comparáveis.

O LLB é completamente separado do frontend do BuildKit. A interface pega uma representação legível por humanos de uma imagem, como um Dockerfile , e a converte em um gráfico LLB. Uma vez gerado, um LLB pode ser exportado e movido entre ambientes. A exportação para um registro permite que os clientes front-end capturem um LLB existente para melhorar ainda mais o desempenho da primeira compilação.

Os detalhes técnicos do LLB são bastante complexos. A tecnologia subjacente é baseada na teoria dos grafos e na comparação da soma de verificação. Você não precisa entendê-lo para se beneficiar de seu poder: como usuário final, você cria o trabalho da mesma maneira que sempre faz, com o comando docker build .

O BuildKit ainda cria imagens compatíveis com OCI que são portáteis para diferentes ambientes de contêiner. Você pode usar o BuildKit para criar qualquer imagem do Docker baseada em Linux. As imagens do Windows não são suportadas atualmente.

Ativando o suporte ao BuildKit

Há duas maneiras de habilitar o BuildKit. Se você quiser construir uma única imagem com a função, defina a variável de ambiente DOCKER_BUILDKIT em seu shell:

 DOCKER_BUILDKIT=1 compilação do docker .

Para uso a longo prazo, configure o daemon do Docker para usar o BuildKit por padrão. Crie ou edite o arquivo /etc/docker/daemon.json e adicione o seguinte conteúdo ao objeto de configuração de nível superior:

 { "features": { "buildkit": true } }

Recarregue a configuração do daemon para aplicar a mudança:

 área de recarga systemctl

O BuildKit agora será usado em vez do mecanismo de compilação padrão ao executar o comando docker build .

Você pode saber quando o BuildKit está ativo porque produz uma saída CLI diferente para o mecanismo normal. A visualização de progresso do BuildKit oferece melhor legibilidade e uma visão clara de quando cada estágio começa e termina. As informações incluem um detalhamento do tempo necessário para construir cada camada.

"docker buildx"

Você também pode interagir com o BuildKit por meio dos comandos docker buildx . Eles sempre usarão o BuildKit. O comando dockerx group expõe a funcionalidade avançada do BuildKit, incluindo a capacidade de compilar em um host remoto.

Um único cliente BuildKit pode interagir com várias instâncias diferentes do gerador de imagens. Isso facilita as compilações entre plataformas, permitindo que você adicione um construtor para cada arquitetura que você está direcionando.

Aqui está um exemplo de como adicionar um host remoto como um destino do BuildKit. Isso pressupõe que a máquina de destino tenha um soquete do Docker exposto na porta TCP 2375. O host pode ser referenciado por qualquer identificador de ponto de extremidade do Docker ou pelo nome de um contexto do Docker (obtido de docker context ls ). O último permite que você crie ambientes de nuvem compatíveis, adicionando-os como um contexto.

 docker buildx create --name remote-builder tcp://my-docker-host:2375

Você pode selecionar o construtor a ser usado com o comando docker buildx use :

 docker buildx usar construtor remoto

Você pode então usar o comando build para criar a imagem na instância do construtor selecionada:

 docker build x build .

Você pode remover instâncias do construtor usando docker buildx rm , passando o nome do fabricante. Os construtores são listados por docker buildx ls ; você pode usar docker buildx inspect para obter informações mais detalhadas sobre um fabricante específico.

Se você quiser verificar o uso do disco do BuildKit, execute o comando docker buildx du . Você pode limpar o cache de compilação para liberar espaço de armazenamento com docker buildx prune . Isso pode diminuir o desempenho na próxima vez que você reconstruir a imagem, pois as camadas armazenadas em cache anteriormente serão reconstruídas.

funções de construção

O BuildKit adiciona alguns recursos de tempo de compilação adicionais para simplificar as etapas do Dockerfile .

Você pode passar dados secretos usando o sinalizador --secret . Isso permite que você Dockerfile acesse valores sensíveis sem armazená-los na imagem. Valores disponíveis apenas em construção.

 docker build --secret id=demo-secret,src=demo-secret.txt .
 FROM my-image:latest RUN --mount=type=secret,id=demo-secret cat /run/secrets/demo-secrets

Este Dockerfile refere-se a um segredo chamado demo-secret . Seu valor é lido do arquivo demo-secret.txt quando a docker build é executada. A educação RUN com o sinalizador --mount fornece acesso ao segredo. O arquivo é montado temporariamente no diretório /run/secrets .

O BuildKit também permite que você encaminhe o agente SSH do seu host para que as instruções de compilação possam interagir com as conexões remotas existentes. Passe o sinalizador --ssh uma docker build e adicione --mount=type=ssh por instruções RUN em seu Dockerfile :

 docker build --ssh .
 RUN --mount=type=ssh git clone [email protected] :/project.git

Esses recursos tornam a geração de imagens mais conveniente sem comprometer a segurança geral. O encaminhamento do agente SSH e as montagens secretas estão disponíveis apenas no BuildKit; não há contrapartida no mecanismo de compilação padrão.

Conclusão

O BuildKit é o gerador de imagens Docker de próxima geração que usa um formato binário gráfico para acelerar drasticamente as compilações. Embora o desempenho varie consideravelmente para cada Dockerfile , você pode esperar notáveis ​​acelerações nos casos em que o processamento paralelo de camadas de imagem é possível.

A arquitetura BuildKit otimiza alguns dos recursos mais recentes do Dockerfile . As compilações de vários estágios se beneficiam de pular estágios não utilizados, o que torna o processo mais eficiente do que o construtor padrão.

Embora o BuildKit agora esteja estável, o Docker ainda não é fornecido com ele por padrão. Certifique-se de habilitá-lo em seu cliente Docker se quiser usar seus recursos. Há uma proposta ativa para tornar o BuildKit o mecanismo de compilação padrão, mas ainda há problemas não resolvidos que impedem a alteração.

  • Produtos de higiene pessoal sólidos ajudam a evitar problemas de restrição de líquidos TSA
  • Quão mais rápido é e o que mais há de novo?

descubra mais conteúdo

Google Pixel Watch também tem detecção de queda, mas não até o próximo ano

As melhores xícaras de café aquecidas de 2022

Como automatizar seu iPhone com base na hora, atividade ou localização

"Isso deve ter sido antes do meu tempo"

Por que a NASA enviou Snoopy para a Lua? – Revisão Geek

O que é uma carga fantasma?

Deixe uma resposta Cancelar resposta

Ir arriba