9.5. Creación de imágenes desde cero con Buildah


En lugar de comenzar con una imagen base, puede crear un nuevo contenedor que no tenga contenido y sólo una pequeña cantidad de metadatos del contenedor. Esto se conoce como un contenedor scratch. Aquí hay algunos aspectos a tener en cuenta cuando se opta por crear una imagen partiendo de un contenedor base con el comando buildah:

  • Cuando se construye un contenedor scratch se pueden copiar ejecutables sin dependencias en la imagen scratch y hacer unos pocos ajustes de configuración para que funcione un contenedor mínimo.
  • Para utilizar herramientas como yum o rpm paquetes para poblar el contenedor scratch, es necesario al menos inicializar una base de datos RPM en el contenedor y añadir un paquete de liberación. El ejemplo siguiente muestra cómo hacerlo.
  • Si acaba añadiendo muchos paquetes RPM, considere la posibilidad de utilizar las imágenes base de ubi o ubi-minimal en lugar de una imagen de cero. Estas imágenes base han sido recortadas en cuanto a documentación, paquetes de idiomas y otros componentes, lo que puede hacer que tu imagen sea más pequeña.

Este ejemplo añade un servicio web (httpd) a un contenedor y lo configura para que se ejecute. Para empezar, crea un contenedor de cero:

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

Esto crea sólo un contenedor vacío (sin imagen) que puede montar de la siguiente manera:

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

Inicialice una base de datos RPM dentro de la imagen scratch y añada el paquete redhat-release (que incluye otros archivos necesarios para que los RPM funcionen):

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

Instale el servicio httpd en el directorio scratch:

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

Añade algún texto a un archivo index.html en el contenedor, para poder probarlo más tarde:

# echo \ "Su contenedor httpd desde cero funcionó.\N- > $scratchmnt/var/www/html/index.html
Copy to Clipboard Toggle word wrap

En lugar de ejecutar httpd como un servicio init, establezca algunas opciones de buildah config para ejecutar el demonio httpd directamente desde el contenedor:

# 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 ahora, puede utilizar el ID de la imagen para ejecutar la nueva imagen como un contenedor con el 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
Volver arriba
Red Hat logoGithubredditYoutubeTwitter

Aprender

Pruebe, compre y venda

Comunidades

Acerca de la documentación de Red Hat

Ayudamos a los usuarios de Red Hat a innovar y alcanzar sus objetivos con nuestros productos y servicios con contenido en el que pueden confiar. Explore nuestras recientes actualizaciones.

Hacer que el código abierto sea más inclusivo

Red Hat se compromete a reemplazar el lenguaje problemático en nuestro código, documentación y propiedades web. Para más detalles, consulte el Blog de Red Hat.

Acerca de Red Hat

Ofrecemos soluciones reforzadas que facilitan a las empresas trabajar en plataformas y entornos, desde el centro de datos central hasta el perímetro de la red.

Theme

© 2025 Red Hat