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.

Índice

    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

    Subir