Red Hat Training
A Red Hat training course is available for RHEL 8
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
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
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
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:
# rpm -qd buildah # man buildah buildah(1) General Commands Manual buildah(1) NAME Buildah - A command line tool that facilitates building OCI container images. ...
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.