Capítulo 9. Construindo imagens de contêineres com Buildah
O comando buildah permite criar imagens de contêineres a partir de um contêiner funcional, um Dockerfile, ou do zero. As imagens resultantes são compatíveis com a OCI, portanto funcionarão em qualquer tempo de funcionamento do contêiner que atenda à Especificação de tempo de funcionamento da OCI (como Docker e CRI-O).
Esta seção descreve como usar o comando buildah para criar e trabalhar com recipientes e imagens de recipientes.
9.1. Entendendo Buildah Copiar o linkLink copiado para a área de transferência!
Usar Buildah é diferente de construir imagens com o comando docker das seguintes maneiras:
- No Daemon!: Desvia o daemon Docker! Portanto, não é necessário tempo de funcionamento do contêiner (Docker, CRI-O, ou outro) para usar o Buildah.
- Base image or scratch: Permite não somente construir uma imagem baseada em outro recipiente, mas também permite que você comece com uma imagem vazia (scratch).
Build tools external: Não inclui ferramentas de construção dentro da própria imagem. Como resultado, Buildah:
- Reduz o tamanho das imagens que você constrói
- Torna a imagem mais segura por não ter o software utilizado para construir o recipiente (como gcc, make, e yum) dentro da imagem resultante.
- Cria imagens que requerem menos recursos para transportar as imagens (porque são menores).
A Buildah é capaz de operar sem Docker ou outros tempos de funcionamento de containers, armazenando dados separadamente e incluindo recursos que permitem não apenas construir imagens, mas executar essas imagens também como containers. Por padrão, a Buildah armazena imagens em uma área identificada como containers-storage (/var/lib/contêineres).
O local de armazenamento de contêineres que o comando buildah usa por padrão é o mesmo local que o motor de contêineres CRI-O usa para armazenar cópias locais de imagens. Assim, as imagens retiradas de um registro por CRI-O ou Buildah, ou comprometidas pelo comando buildah, serão armazenadas na mesma estrutura de diretório. Atualmente, entretanto, CRI-O e Buildah não podem compartilhar contêineres, embora possam compartilhar imagens.
Há mais de uma dúzia de opções para usar com o comando buildah. Algumas das principais atividades que você pode fazer com o comando buildah incluem:
-
Build a container from a Dockerfile: Utilize um Dockerfile para construir uma nova imagem do container (
buildah bud). -
Build a container from another image or scratch: Construir um novo container, começando com uma imagem de base existente (
buildah from <imagename>) ou do zero (buildah from scratch) -
Inspecting a container or image: Ver metadados associados ao recipiente ou à imagem (
buildah inspect) -
Mount a container: Montar o sistema de arquivos raiz de um contêiner para adicionar ou alterar o conteúdo (
buildah mount). -
Create a new container layer: Use o conteúdo atualizado do sistema de arquivos raiz de um contêiner como uma camada do sistema de arquivos para comprometer o conteúdo a uma nova imagem (
buildah commit). -
Unmount a container: Desmontar um recipiente montado (
buildah umount). -
Delete a container or an image: Remover um recipiente (
buildah rm) ou uma imagem do recipiente (buildah rmi).
Para mais detalhes sobre Buildah, veja a página de GitHub Buildah. O site GitHub Buildah inclui páginas de homem e software que podem ser mais recentes do que as disponíveis com a versão RHEL. Aqui estão alguns outros artigos sobre Buildah que podem lhe interessar:
9.1.1. Instalando o Buildah Copiar o linkLink copiado para a área de transferência!
O pacote buildah está disponível com o módulo container-tools no RHEL 8 (yum module install container-tools). Você pode instalar o pacote buildah separadamente, digitando:
yum -y install buildah
# yum -y install buildah
Com o pacote buildah instalado, você pode consultar as páginas de manual incluídas com o pacote buildah para obter detalhes sobre como usá-lo. Para ver as páginas de manual disponíveis e outra documentação, então abra uma página de manual, digite:
As seções seguintes descrevem como usar buildah para obter recipientes, construir um recipiente a partir de um Dockerfile, construir um do zero e gerenciar recipientes de várias maneiras.