Acelere la construcción de contenedores con montajes apilados

ayuda con un desafío que encontramos cuando tenemos varios contenedores en un solo host. El problema básico es que cada vez que ejecutas dnf
Donde yum
Dentro de un contenedor, el contenedor descarga y procesa metadatos de todos los repositorios. Para resolver este problema, agregamos un montaje de volumen avanzado para permitir que todos los contenedores compartan metadatos de host. Este enfoque evita repetir la descarga y el procesamiento de cada contenedor. Anteriormente escribí una publicación de blog que presentaba el concepto de montajes apilados dentro de las construcciones.
Personalmente, creo que esta es una característica realmente genial. Me gusta usarlo cada vez que hago una serie de compilaciones y juego con Containerfiles o Dockerfiles.
Cómo llenar el caso del anfitrión
Tenía una pregunta en el blog de Guillaume Moutier sobre cómo llenar el cuadro de host:
¡Hola Dan! Acabo de leer su artículo sobre cómo acelerar las compilaciones de contenedores con caché local, así que quería implementar la técnica para una de mis compilaciones, ya que tengo que probar cosas diferentes, así que reinicie la compilación cada 5-10 minutos... Supongo que lo descubrí. la mayor parte (soy relativamente nuevo en esta parte del proceso), pero como estoy en Fedora 31 y uso una imagen base de CentOS 7, me preguntaba cómo completar el caso en mi host. Especialmente porque dnf no es parte de CentOS7 si tengo razón... ¿Tiene eso sentido?
Busqué información sobre cómo crear un caché para Centos 7 en una caja de Fedora, y busqué el /etc/yum.repos.d/centos.repo
archivo en Internet. Estaba preocupado por la forma yum
dentro de Centos 7 manejaría los metadatos creados por dnf
en Fedora. ¿Funcionaría siquiera?
En ese momento me di una bofetada y pensé que debería usar un centos:7
contenedor para crear el caché en Fedora!
Es fácil
Esto es lo fácil que es hacerlo. Primero, creo un directorio en mi host para almacenar el caché. Luego ejecuto un centos:7
contenedor y ejecute el yum makecache
pedido.
# mkdir -p /var/cache/centos/7
# podman run -v /var/cache/centos/7:/var/cache/yum:z -ti centos:7 yum makecache
Tenga en cuenta que hice esto con un bloqueo Podman contenedor y le permitió escribir en el caché.
Luego creo un archivo contenedor de prueba, que ejecuta un yum -y update
.
# cat /tmp/Containerfile
FROM centos:7
RUN yum -y update
Now I can just run a podman build with an overlay volume mount and take advantage of the local repo.
# time podman build -v /var/cache/centos/7:/var/cache/yum:O /tmp
…
real 0m56.132s
user 0m26.298s
sys 0m10.332s
contra:
# time podman build /tmp
...
real 1m5.902s
user 0m29.404s
sys 0m11.332s
¡Esto representa alrededor de un 20% de ahorro de tiempo en la construcción!
Obviamente, puede repetir este proceso para todas sus distribuciones RPM favoritas.
Pero, ¿qué pasa con el repositorio EPEL?
Después de sugerirle esto a Guillaume, respondió con:
Eso tiene sentido, supongo, pero ¿qué pasa con el repositorio EPEL (usado en el segundo conjunto de instalaciones)?
La respuesta es configurar una imagen basada en el original. Centos:7
imagen con el repositorio EPEL definido en su interior. Luego usa el podman
comando para ejecutar makeimage
en este contenedor con el volumen host.
Conclusión
En última instancia, con los montajes apilados en su granja de servidores de compilación, puede usar contenedores para acelerar las compilaciones para varias distribuciones al mismo tiempo.
Artículos de interés