Cuando necesite la herramienta adecuada, no hay nada como ir a su ferretería local y caminar por los pasillos. Es genial recorrer el pasillo de herramientas manuales y ver todos los destornilladores, martillos, llaves hexagonales, cintas métricas y más. Justo cuando crees que has descubierto la herramienta adecuada, te asalta un pensamiento:si puedo hacerlo con una herramienta manual, ¡realmente puedo hacerlo con la herramienta eléctrica perfecta!
Al menos eso es lo que me dice mi esposa, y verás, ella es la persona útil en nuestra familia. Mis herramientas preferidas son las herramientas tecnológicas. Dame un pasillo de tarjetas de video en una tienda de computadoras y seré un campista feliz.
Recientemente hice una demostración en la reunión de la comunidad de Podman mostrando algunas de las nuevas herramientas de contenedores más brillantes que hemos desarrollado para Podman y Buildah. Hemos tenido muchos anuncios importantes con Podman v3.0, así que pensé que algunas de estas herramientas podrían haber quedado en segundo plano. Como recibí buenos comentarios de esa demostración, sentí que una publicación de seguimiento también podría ser útil. Así que profundicemos y saquemos a relucir estas nuevas y brillantes herramientas de contenedor.
Cambia el primer FROM en tu Containerfile
Hay un nuevo --from
opción en el buildah bud
comando que pronto llegará a Podman v3.0. Esta opción le permite reemplazar el valor asociado con el primero, y solo el primero, DE declaración en el Containerfile. Por ejemplo, si tenemos este Containerfile:
# cat ~/Containerfile.multifrom
FROM fedora as builder
FROM busybox
COPY --from=builder /bin/df /tmp/df_tester
Podemos hacer una ejecución inicial y mostrará que usamos fedora
imagen del contenedor. Luego el busybox
se usa la imagen y finalmente se copian los archivos de fedora
's /bin/df
directorio en el busybox
imágenes' /tmp/df_tester
directorio.
# buildah bud -t multi -f ~/Containerfile.multifrom .
STEP 1: FROM fedora AS builder
Resolved "fedora" as an alias (/etc/containers/registries.conf.d/shortnames.conf)
Getting image source signatures
Copying blob 157ab8011454 done
Copying config 9f2a560376 done
Writing manifest to image destination
Storing signatures
--> 9f2a5603764
STEP 2: FROM busybox
Resolved "busybox" as an alias (/root/.config/containers/short-name-aliases.conf)
Getting image source signatures
Copying blob 4c892f00285e done
Copying config 22667f5368 done
Writing manifest to image destination
Storing signatures
STEP 3: COPY --from=builder /bin/df /tmp/df_tester
STEP 4: COMMIT multi
Getting image source signatures
Copying blob 6b245f040973 skipped: already exists
Copying blob 9b68b051b385 done
Copying config 187c956137 done
Writing manifest to image destination
Storing signatures
--> 187c9561378
187c9561378efb043dfd0e8fa9c0afbdc0cf2faeb244e0dd7f2003321feab524
Ahora imagina una situación más real, una en la que tu DE La declaración apunta a una imagen personalizada con una variedad de etiquetas para diferentes versiones de la imagen. Sería bueno, especialmente en un entorno de CI, simplemente pasar la imagen del contenedor que desea usar en la próxima ejecución en lugar de volver a crear todo el Dockerfile. Ese es el trabajo que --from
llena.
En este ejemplo, ejecutaremos el mismo bud
comando, pero esta vez agregaremos --from alpine:latest
.
# buildah bud -t multi -f ~/Containerfile.multifrom --from alpine:latest .
STEP 1: FROM alpine:latest AS builder
Resolved "alpine" as an alias (/etc/containers/registries.conf.d/shortnames.conf)
Getting image source signatures
Copying blob 4c0d98bf9879 done
Copying config e50c909a8d done
Writing manifest to image destination
Storing signatures
--> e50c909a8df
STEP 2: FROM busybox
STEP 3: COPY --from=builder /bin/df /tmp/df_tester
STEP 4: COMMIT multi
Getting image source signatures
Copying blob 6b245f040973 skipped: already exists
Copying blob b498f23d5c32 done
Copying config d7e92107ed done
Writing manifest to image destination
Storing signatures
--> d7e92107edf
d7e92107edf42f046f6a7faddade4825ef1c2361ae21eb0ac3694871dcdb496c
Puedes ver que el alpine:latest
La imagen del contenedor se usó por primera vez, y ahora después del busybox
se creó la imagen, los archivos de /bin/df
de alpine se copiaron en /tmp/df_tester
directorio en busybox
. El valor del primer FROM declaración en el Containerfile fue reemplazada con el argumento que pasamos con el --from
opción.
[ También le puede interesar leer: Contenedores sin raíz con Podman ]
Aceptar entrada durante una compilación
Otra herramienta nueva es --stdin
opción que va junto con buildah bud
o podman build
(a partir de Podman v3.0). Cuando usa esta opción, el proceso de compilación se detendrá y solicitará una entrada de teclado si el proceso que se ejecuta durante el procedimiento de compilación lo solicita.
Eche un vistazo a este archivo contenedor:
# cat /root/Containerfile.stdin
FROM ubi8
RUN yum install iputils
RUN touch /tmp/done
Este Containerfile usa el ubi8
imagen y luego instala iputils
. Como probablemente puedas adivinar, el yum
El comando nos pedirá que verifiquemos la instalación de iputils
. Veamos qué sucede sin --stdin
opción en juego.
# cat /root/Containerfile.stdin
FROM ubi8
RUN yum install iputils
RUN touch /tmp/done
# cat /root/Containerfile.stdin
FROM ubi8
RUN yum install iputils
RUN touch /tmp/done
# buildah bud -t mystdin -f ~/Containerfile.stdin .
STEP 1: FROM ubi8
Resolved "ubi8" as an alias (/etc/containers/registries.conf.d/shortnames.conf)
Getting image source signatures
Copying blob d9e72d058dc5 done
Copying blob cca21acb641a done
Copying config 3269c37eae done
Writing manifest to image destination
Storing signatures
STEP 2: RUN yum install iputils
Updating Subscription Management repositories.
Unable to read consumer identity
This system is not registered to Red Hat Subscription Management. You can use subscription-manager to register.
Red Hat Universal Base Image 8 (RPMs) - BaseOS 2.5 MB/s | 774 kB 00:00
Red Hat Universal Base Image 8 (RPMs) - AppStre 7.6 MB/s | 5.0 MB 00:00
Red Hat Universal Base Image 8 (RPMs) - CodeRea 75 kB/s | 13 kB 00:00
Dependencies resolved.
================================================================================
Package Architecture Version Repository Size
================================================================================
Installing:
iputils x86_64 20180629-2.el8 ubi-8-baseos 149 k
Transaction Summary
================================================================================
Install 1 Package
Total download size: 149 k
Installed size: 361 k
Is this ok [y/N]: Operation aborted.
error building at STEP "RUN yum install iputils": error while running runtime: exit status
Cuando yum
instalado iputils
, solicitó una confirmación y falló porque nunca recibió una respuesta. Ahora veamos qué sucede con --stdin
opción en juego.
# buildah bud -t mystdin --stdin -f ~/Containerfile.stdin .
STEP 1: FROM ubi8
STEP 2: RUN yum install iputils
Updating Subscription Management repositories.
Unable to read consumer identity
This system is not registered to Red Hat Subscription Management. You can use subscription-manager to register.
Red Hat Universal Base Image 8 (RPMs) - BaseOS 2.8 MB/s | 774 kB 00:00
Red Hat Universal Base Image 8 (RPMs) - AppStre 7.5 MB/s | 5.0 MB 00:00
Red Hat Universal Base Image 8 (RPMs) - CodeRea 86 kB/s | 13 kB 00:00
Dependencies resolved.
================================================================================
Package Architecture Version Repository Size
================================================================================
Installing:
iputils x86_64 20180629-2.el8 ubi-8-baseos 149 k
Transaction Summary
================================================================================
Install 1 Package
Total download size: 149 k
Installed size: 361 k
Is this ok [y/N]: y
No se ve tan bien en un blog como en persona, pero el proceso de creación se detiene en la línea Is this ok [y/N]: e ingresé el carácter y y la compilación continuó (ver el resultado a continuación).
Downloading Packages:
iputils-20180629-2.el8.x86_64.rpm 972 kB/s | 149 kB 00:00
--------------------------------------------------------------------------------
Total 952 kB/s | 149 kB 00:00
Running transaction check
Transaction check succeeded.
Running transaction test
Transaction test succeeded.
Running transaction
Preparing : 1/1
Installing : iputils-20180629-2.el8.x86_64 1/1
Running scriptlet: iputils-20180629-2.el8.x86_64 1/1
Verifying : iputils-20180629-2.el8.x86_64 1/1
Installed products updated.
Installed:
iputils-20180629-2.el8.x86_64
Complete!
STEP 3: RUN touch /tmp/done
STEP 4: COMMIT mystdin
Getting image source signatures
Copying blob 92538e92de29 skipped: already exists
Copying blob eb7bf34352ca skipped: already exists
Copying blob f9ed641975cb done
Copying config b2742f08a7 done
Writing manifest to image destination
Storing signatures
--> b2742f08a7a
b2742f08a7ae2cb76a2cd0c481f2d2d66b303379d23e5260577ea09476a8a486
Este es otro ejemplo simplista, especialmente porque podría agregar un -y
argumento del yum
dominio. Aún así, puede haber otros comandos que le gustaría ejecutar durante el proceso de compilación en los que le gustaría obtener información más importante fácilmente.
Encuentre las etiquetas para una imagen de contenedor
La siguiente herramienta, que es relativamente nueva en Podman, muestra todas las etiquetas de una imagen de contenedor en un registro. Uso imágenes en quay.io para Buildah, Podman y Skopeo, y a veces quiero usar una versión particular de uno de los proyectos y no puedo recordar cuál está disponible. Si está familiarizado con Skopeo, funciona muy bien en este espacio. Pero si no ha instalado Skopeo localmente, o no puede por alguna razón, entonces el nuevo --list-tags
opción para la podman search
el mando es tu billete.
Entonces, veamos todas las etiquetas que tiene la imagen estable de Podman en quay.io:
# podman search --list-tags quay.io/podman/stable
NAME TAG
quay.io/podman/stable v1.4.4
quay.io/podman/stable v1.4.2
quay.io/podman/stable v1.5.1
quay.io/podman/stable v1.5.0
quay.io/podman/stable v1.6.2
quay.io/podman/stable auto
quay.io/podman/stable v1.6
quay.io/podman/stable v1.9.0
quay.io/podman/stable v1.9.1
quay.io/podman/stable v2.0.2
quay.io/podman/stable v2.0.6
quay.io/podman/stable v2.1.1
quay.io/podman/stable master
quay.io/podman/stable latest
Rápido, fácil y práctico.
Uso de la imagen del contenedor de Skopeo
Esta herramienta es una especie de ying hasta las últimas herramientas yang . El proyecto Skopeo está lleno de muchas herramientas para usar con imágenes de contenedores. También le mostrará la lista de etiquetas que tiene una imagen en un registro. Skopeo también puede mostrar información sobre un registro, permitirle copiar una imagen de contenedor entre mecanismos de almacenamiento, incluidos registros, sincronizar un registro de contenedor, eliminar una imagen de un registro y más.
Ahora no voy a sumergirme en cada uno de estos comandos de Skopeo aquí. Solo voy a hacer la función de búsqueda para mostrar las etiquetas. El giro es que solo usaré Podman para ejecutar quay.io/skopeo/stable:latest
imagen, eliminando así la necesidad de tener Skopeo instalado y aún tener todas sus funciones disponibles.
Entonces, enumeremos las etiquetas de quay.io/podman/stable:latest
imagen de nuevo, pero esta vez a través de la imagen del contenedor de Skopeo:
# podman run quay.io/skopeo/stable:latest list-tags docker://quay.io/podman/stable
Trying to pull quay.io/skopeo/stable:latest...
Getting image source signatures
Copying blob 6629904ed3b7 done
Copying blob 2b74ed94761c done
Copying blob 692512e477a1 done
Copying blob 166a3cbbffd1 done
Copying blob b1e90be38d32 done
Copying blob a5dc7d6cfd62 done
Copying blob a3ed95caeb02 done
Copying blob a3ed95caeb02 done
Writing manifest to image destination
Storing signatures
{
"Repository": "quay.io/podman/stable",
"Tags": [
"v1.4.4",
"v1.4.2",
"v1.5.1",
"v1.5.0",
"v1.6.2",
"auto",
"v1.6",
"v1.9.0",
"v1.9.1",
"v2.0.2",
"v2.0.6",
"v2.1.1",
"master",
"latest"
]
}
La primera vez que ejecuta este comando, es más lento que el equivalente de Podman ya que incurre en el costo del skopeo
imagen del contenedor que se extrae. Después de eso, la velocidad es equivalente en ejecuciones secundarias, y luego puede ejecutar cualquier otro comando de Skopeo que desee también.
Te dejaré explorar más por tu cuenta y te sugiero que comiences tu exploración con Cómo ejecutar Skopeo en un contenedor de Valentin Rothberg. . Creo que la imagen del contenedor de Skopeo es la herramienta más brillante en mi caja de herramientas de contenedores.
[ ¿Empezando con los contenedores? Consulta este curso gratuito. Implementación de aplicaciones en contenedores:una descripción técnica general. ]
Todas las herramientas nuevas y brillantes
Ahora mi esposa todavía puede tener todas sus herramientas brillantes de la ferretería local, y mantendré mis nuevas herramientas de contenedor en mi caja de herramientas virtual. Espero que estos nuevos comandos y opciones le resulten útiles en su propia caja de herramientas.