Red Hat Training
A Red Hat training course is available for RHEL 8
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 pacotesrpm
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
ouubi-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
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
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
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
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
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
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.