9.5. Criando imagens a partir do zero com Buildah


Em vez de começar com uma imagem de base, você pode criar um novo recipiente que não contenha nenhum conteúdo e apenas uma pequena quantidade de metadados do recipiente. Isto é referido como um contêiner scratch. Aqui estão algumas questões a serem consideradas ao optar por criar uma imagem a partir de um contêiner a partir do zero com o comando buildah:

  • Ao construir um contêiner de risco você pode copiar um executável sem dependências na imagem de risco e fazer algumas configurações para conseguir um contêiner mínimo para funcionar.
  • Para usar ferramentas como yum ou pacotes rpm para preencher o contêiner de raspar, é necessário pelo menos inicializar um banco de dados RPM no contêiner e adicionar um pacote de liberação. O exemplo abaixo mostra como fazer isso.
  • Se você acabar adicionando muitos pacotes de RPM, considere o uso das imagens de base ubi ou ubi-minimal em vez de uma imagem de arranhão. Essas imagens de base tiveram documentação, pacotes de idiomas e outros componentes cortados, o que pode resultar em uma imagem menor.

Este exemplo acrescenta um serviço Web (httpd) a um recipiente e o configura para funcionar. Para começar, crie um contêiner de arranhões:

# buildah from scratch
working-container
Copy to Clipboard Toggle word wrap

Isto cria apenas um recipiente vazio (sem imagem) que você pode montar da seguinte forma:

# scratchmnt=$(buildah mount working-container)
# echo $scratchmnt
/var/lib/containers/storage/devicemapper/mnt/cc92011e9a2b077d03a97c0809f1f3e7fef0f29bdc6ab5e86b85430ec77b2bf6/rootfs
Copy to Clipboard Toggle word wrap

Inicializar um banco de dados RPM dentro da imagem raspada e adicionar o pacote redhat-release (que inclui outros arquivos necessários para que os RPMs funcionem):

# yum install -y --releasever=8 --installroot=$scratchmnt redhat-release
Copy to Clipboard Toggle word wrap

Instale o serviço httpd no diretório de raspadinhas:

# yum install -y --setopt=reposdir=/etc/yum.repos.d \
     --installroot=$scratchmnt \
     --setopt=cachedir=/var/cache/dnf httpd
Copy to Clipboard Toggle word wrap

Adicione algum texto a um arquivo index.html no recipiente, para que você possa testá-lo mais tarde:

# echo "Seu container httpd do zero funcionou" > $scratchmnt/var/wwww/html/index.html
Copy to Clipboard Toggle word wrap

Em vez de executar o httpd como um serviço init, defina algumas opções em buildah config para executar o daemon httpd diretamente do container:

# buildah config --cmd "/usr/sbin/httpd -DFOREGROUND" working-container
# buildah config --port 80/tcp working-container
# buildah commit working-container localhost/myhttpd:latest
Copy to Clipboard Toggle word wrap

Por enquanto, você pode usar o ID da imagem para executar a nova imagem como um recipiente com o comando podman:

# podman images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
localhost/myhttpd   latest              47c0795d7b0e        9 minutes ago       665.6 MB
# podman run -p 8080:80 -d --name httpd-server 47c0795d7b0e
# curl localhost:8080
Your httpd container from scratch worked.
Copy to Clipboard Toggle word wrap
Voltar ao topo
Red Hat logoGithubredditYoutubeTwitter

Aprender

Experimente, compre e venda

Comunidades

Sobre a documentação da Red Hat

Ajudamos os usuários da Red Hat a inovar e atingir seus objetivos com nossos produtos e serviços com conteúdo em que podem confiar. Explore nossas atualizações recentes.

Tornando o open source mais inclusivo

A Red Hat está comprometida em substituir a linguagem problemática em nosso código, documentação e propriedades da web. Para mais detalhes veja o Blog da Red Hat.

Sobre a Red Hat

Fornecemos soluções robustas que facilitam o trabalho das empresas em plataformas e ambientes, desde o data center principal até a borda da rede.

Theme

© 2025 Red Hat